There's actually some redundant code here, but anyway, this code uses some trigonometry to solve it's problem by converting between two coordinate systems: the one we know and love, cartesian (x,y), and polar (r, angle), one that is more useful when you're working with circles (or ships apparently). These two coordinate systems are just used when you are trying to rotate in a circle on a 2d plane, when you need to get a position that you can use in world space (you can't use polar coords in unity world space!).
The formulas one uses to convert between these is the following:
To cartesian: x = r*cos(angle), y = r*sin(angle), if r is 1 you get a direction, which can still be useful; To polar: angle = atan2(y, x) (don't use atan, use atan2, this corrects the quadrants), and r is the distance from what you're interested in rotating around. All of this derives from ratios of a triangle, which you will want to master, and how it fits into a unit circle, which is also worthy of mastering.
pure math: http://www.mathispower4u.com/trigonometry.php
What this code does is
1) (first two calculations) The programmer wants to get a vector that represents the trajectory of an object from the origin of the world to a point at the end of the direction point, where the direction point is connected to the start point (confusing, I know, but this is what he wanted to do). He does this by getting an angle, using anglestep, (remember: he wants to go in a CIRCLE) and converting it to cartesian coordinates. This gives him the "direction" of trajectory. He then adds it to the starting point, getting the projectileDirectionPosition components (this does not make up a direction vector, this is a world position; it adds the direction to the start point and makes some large vector that goes from the tail of starting point to the head/arrow of the direction vector)
2) (second two calculations) The programmer then turns the components into a vector object and subtracts each component by the startPoint (a + b - b, undoing what he did in the first two calculations), normalizing it (undoing the radius multiplication), then multiplying it by a speed (radius?!). He now has a direction vector, you can envision this as an arrow pointing out of the startPoint, and the longer it is, the more velocity it has. It can also be envisioned as a arrow sticking out of the origin; these point in the same direction -- they are just at arbitrary positions (a proper direction vector!).
3) (last of it) He then simply instantiates the object at the start point, and gives it a 0 rotation, and gives it the trajectory velocity he worked very tirelessly to calculate. Remember: imagine an arrow; doesn't matter where, but it shows the direction the object will go in when applied to velocity.