02-12-2020, 11:35 PM

Hm, let's go to a 2D space.

For example, you want to draw a simple arc to a 2D coordinate system from angle 0 to angle 270 in a clockwise direction.

Usually, the angle 0 started on the x axis and the arc progresses downwards, crosses the -y axis, then -x axis and stops at the +y axis. In this case the zeroAngleDirection is (1, 0) - a 2D vector in the x direction. To get the first point on the arc, you start with the center position and add a zeroAngleDirection multiplied by the radius.

But we could also say, that the arc's zero angle starts at the +y axis (on top) - in this case the zeroAngleDirection would be (0, 1). In 2D this is actually not needed because if 0 angle is always on +x axis we still can define all possible arc shapes with different start and end angles.

But in 3D there are many more options - the arc can be oriented on xz plane, or on xy plane or in any other direction. To provide all those options we need to specify a 3D vector that specify in which direction the arc's zero angle is pointing - this also defines the plane on which the arc is drawn (the plane is define by normal and zeroAngleDirection).

The best way to understand that is to open Visual Studio designer with a Viewport3D. Then add a ColoredAxisVisual3D so that you will see into which directions the axes are pointing and then add a LineArcVisucl3D - then in designer change the value of zeroAngleDirection and you should immediately see the results.

For example, you want to draw a simple arc to a 2D coordinate system from angle 0 to angle 270 in a clockwise direction.

Usually, the angle 0 started on the x axis and the arc progresses downwards, crosses the -y axis, then -x axis and stops at the +y axis. In this case the zeroAngleDirection is (1, 0) - a 2D vector in the x direction. To get the first point on the arc, you start with the center position and add a zeroAngleDirection multiplied by the radius.

But we could also say, that the arc's zero angle starts at the +y axis (on top) - in this case the zeroAngleDirection would be (0, 1). In 2D this is actually not needed because if 0 angle is always on +x axis we still can define all possible arc shapes with different start and end angles.

But in 3D there are many more options - the arc can be oriented on xz plane, or on xy plane or in any other direction. To provide all those options we need to specify a 3D vector that specify in which direction the arc's zero angle is pointing - this also defines the plane on which the arc is drawn (the plane is define by normal and zeroAngleDirection).

The best way to understand that is to open Visual Studio designer with a Viewport3D. Then add a ColoredAxisVisual3D so that you will see into which directions the axes are pointing and then add a LineArcVisucl3D - then in designer change the value of zeroAngleDirection and you should immediately see the results.

Andrej Benedik