Equidistant Curve MbOffsetCurve3D

The MbOffsetCurve3D class is declared in the cur_offset_curve3d.h file.

An equidistant curve is defined by the base curve MbCurve3D basisCurve and the offset vector MbVector3D offset. The curve also has some additional data that is optional and is used to speed up the curve methods.

The base curve basisCurve is a MbSpine object, which constructs a moving local coordinate system along the curve, with the first coordinate axis directed along the tangent to the curve. The offset vector offset defines the displacement of the start point of the base curve to the start point of the equidistant curve. The offset vector offset is orthogonal to the tangent vector of the base curve at the start point. In the moving local coordinate system, the displacement of all points of the base curve to the corresponding points of the equidistant curve is equal to the offset vector and orthogonal to the tangent vector of the base curve at the current point.

The radius vector of a point of the equidistant curve is computed as follows. For a given parameter of the base curve, a point on the spine curve and a local coordinate system with the origin at this point and the first coordinate axis directed along the tangent to the curve at this point are computed. Then the rotation matrix of the local coordinate system during its movement from the start point of the base curve to the given point is computed. A copy of the offset vector is transformed by this rotation matrix, and the computed point of the base curve is shifted by the resulting vector.

In the PointOn( double & t, MbCartPoint3D & r) method, the radius vector of the curve r is described by the vector function

\[\mathbf{r}(t) = \mathbf{basisCurve}(t) + \mathbf{offset} \cdot \mathbf{A}(t),\]

where A(t) is the rotation matrix of the local coordinate system during its movement from the start point of the base curve to the given point.

The equidistant curve to a conical spiral is shown in the figure:

../../../../_images/O.4.12.1.png

The parameter range of the equidistant curve coincides with the parameter range of the base curve.

Another equidistant curve must not be used as the base curve for an equidistant curve; the spine curve of the latter must be used with the corresponding recalculation of the offset vector.