## Curve definition

@CURVE_DEFINITION {
@CURVE_NAME {CurveName} {
@IS_DEFINED_IN_FRAME {FrameName}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {n}
@DEGREE_OF_CURVE {p}
@RATIONAL_CURVE_FLAG {RationalFlag}
@END_POINT_0 {Point0Name}
@WEIGHT_DEFINITION {w0}
@COORDINATES {x1, x2, x3, w}
@END_POINT_1 {Point1Name}
@WEIGHT_DEFINITION { w1}
@SPLINE {SplineFlag}
}
@KNOT_SEQUENCE_DEFINITION {
@KNOT_SEQUENCE {u1, u2, u3,... um}
}
}
}

### Introduction ##### Figure 1. Configuration of a curve.

Figure 1 shows a curve of arbitrary shape in three-dimensional space. Optionally, a triad field and meshing parameters can be associated with the curve. Curve shapes are defined by their Non Uniform Rational B-Spline (NURBS) representation. Plots of the curve geometry will be generated, if requested by the visualization control parameters.

### Curve Parameterizations

Curves can be parameterized in different manners: using the eta, curvilinear, or axis coordinate techniques. The parameterization of a curve is a technique that associates points on the curve with a continuous scalar coordinate. As this scalar coordinate increases, the corresponding point slides along the curve. Note that the parameterization of the curve defines a direction along the curve: the positive direction corresponds to increasing values of the scalar coordinate.

1. The η-coordinate. Typically, NURBS curves use an arbitrary parameterization in terms of a non-dimensional coordinate, η, such that ηi = 0 and ηf = 1 correspond to the beginning and end points of the curve, respectively, as illustrated in fig. 1. This parameterization is a natural consequence of the formulation of NURBS curves, but is not necessarily the most convenient or natural way to parameterize the curve. Note that coordinate η does not measure length along the curve.
2. The s-coordinate or curvilinear coordinate. It is often more convenient to parameterize the curve in terms of curvilinear coordinate, s, that measures length along the curve and has units of length. This approach is called the intrinsic parameterization of the curve and is illustrated in fig. 2. The beginning and end points of the curve are associated with curvilinear variables si and sf, respectively. The length of the curve is sf - si.
3. ##### Figure 2. Parameterizations of a curve.
4. The x-coordinate or axial coordinate. If the curve extends predominantly along a preferential direction, is is sometimes convenient to use a parameterization which associates a point on the curve with a point at location x along the preferential direction; this coordinate has units of length. Axis i1 of the frame in which the curve is described is assumed to be preferential direction of the curve. The point on the curve is located at the intersection of the curve with the plane normal to axis i1, passing through axial coordinate x, as illustrated in fig. 2. The beginning and end points of the curve are associated with axial coordinates xi and xf, respectively. Note that if the curve intersects a plane normal to axis i1 at multiple points, the axial coordinate is no longer unique and hence, should not be used.

### Curve points

1. Curves can be defined with respect to a fixed frame, FrameName. This frame is the local frame in which the data describing the curve will be defined in.
2. The subsection @POINT_DEFINITION defines the shape of the curve. According to the theory of NURBS curves, three control parameters must be specified first.
1. The number of control points, n, that define the overall shape of the curve;
2. The degree, p, of the polynomials representing the curve. Note that n > p;
3. If RationalFlag = YES, the curve is a rational curve and weights must be defined for all control points. If RationalFlag = NO, the curve is non rational and no weight are defined.
3. Next, n control points are defined. In general, a control point is defined by its @COORDINATES measured in the fixed frame FrameName. The coordinates to be defined are those of points labeled 1, 2, 3, and 4 1n fig. 1.
4. The end point of the curve, denoted endPoint0 and endPoint1 in fig. 1, are often points defined in the model. Hence, rather than repeating their coordinates, the end points can be referred to as Point0Name and Point1Name, respectively. Note that the coordinates of the end points are not affected by the the fixed frame FrameName used to define the curve.
5. The user can either specify the two end points or none. If the two end points are defined, the remaining points must be defined by their @COORDINATES. In the example depicted in fig. 1, the remaining point would be defined in the following order: points labeled 2 and 3.
6. If the curve is a rational curve, weights must be defined for each control point. If a control point is defined by its @COORDINATES, the fourth entry is the weight, w. If the end points of the curve are points of the model, Point0Name and Point1Name, the keyword @WEIGHT_DEFINITION is used their weights, w0 and w1, respectively.
7. The subsection @KNOT_SEQUENCE_DEFINITION defines the knot sequence for the NURBS curve. A total of m = n + p knots must be defined. The first p +1 entries must be ZERO, and the last p + 1 entries must be ONE. The complete knot sequence must be a non decreasing series of numbers. If no knot sequence is defined, a uniform knot sequence is automatically generated according to the declared degree of the curve.

### Notes

1. It is possible to attach comments to the definition of the object; these comments have no effect on its definition.

### Spline

It is sometimes convenient to define a curve by a number of specified points it passes through. A NURBS curve passing through a number of specified points can be constructed using the global interpolation algorithm. In this case, the spline flag should be SplineFlag = YES. The points specified in the curve definition, Point0Name, any intermediate points of coordinates (x1, x2, x3), and Point1Name, are the point the curve passed through. The global interpolation algorithm will compute the location of the n control points of the curve passing through these n specified points. The first and last control points are coincident with the first and last specified points, respectively. The global interpolation algorithm will create a curve of degree p and does not allow the definition of weights for any specified points: the generated curve is non-rational. The knot sequence of the NURBS curve will be computed automatically; hence, it should not explicitly defined.

### Examples

#### Example 1.

The following example defines a straight line between two named points of the model, pointA and pointB, respectively.

@CURVE_NAME {example1} {
@IS_DEFINED_IN_FRAME {INERTIAL}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {2}
@DEGREE_OF_CURVE {1}
@RATIONAL_CURVE_FLAG {NO}
@END_POINT_0 {PointA}
@END_POINT_1 {PointB}
}
}

#### Example 2.

The next example defines a curve in the form of an airfoil, as shown in fig. 2.

@CURVE_NAME {example2} {
@IS_DEFINED_IN_FRAME {INERTIAL}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {5}
@DEGREE_OF_CURVE {3}
@RATIONAL_CURVE_FLAG {NO}
@COORDINATES {0.0000, 0.0000, 0.0}
@COORDINATES {0.7595, 0.0870, 0.0}
@COORDINATES {1.2405, 0.0000, 0.0}
@COORDINATES {0.7595, -0.0870, 0.0}
@COORDINATES {0.0000, 0.0000, 0.0}
}
} #### Example 3.

The next example defines a unit circle, depicted in fig. 3. This is a rational curve and hence, a weight is defined for each point.

@CURVE_NAME {example3}
@IS_DEFINED_IN_FRAME {INERTIAL}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {10}
@DEGREE_OF_CURVE {3}
@RATIONAL_CURVE_FLAG {YES}
@COORDINATES { 0.000, -1.00, 0.0, 1.0000}
@COORDINATES {-0.866, -1.00, 0.0, 0.6667}
@COORDINATES {-1.299, -0.25, 0.0, 0.6667}
@COORDINATES {-0.866, 0.50, 0.0, 1.0000}
@COORDINATES {-0.433, 1.25, 0.0, 0.6667}
@COORDINATES { 0.433, 1.25, 0.0, 0.6667}
@COORDINATES { 0.866, 0.50, 0.0, 1.0000}
@COORDINATES { 1.299, -0.25, 0.0, 0.6667}
@COORDINATES { 0.866, -1.00, 0.0, 0.6667}
@COORDINATES { 0.000, -1.00, 0.0, 1.0000}
}
@KNOT_SEQUENCE_DEFINITION {
@KNOT_SEQUENCE {0.0, 0.0, 0.0, 0.0, 0.3333, 0.3333, 0.3333, 0.6667, 0.6667, 0.6667, 1.0, 1.0, 1.0, 1.0}
}
} #### Example 4.

The next example defines a more complex, non rational curve shown in fig. 4.

@CURVE_NAME {example4}
@IS_DEFINED_IN_FRAME {INERTIAL}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {10}
@DEGREE_OF_CURVE {3}
@RATIONAL_CURVE_FLAG {NO}
@COORDINATES { 0.10, 0.10, 0.0}
@COORDINATES { 0.20, 0.05, 0.0}
@COORDINATES { 0.20, -0.05, 0.0}
@COORDINATES { 0.03, -0.05, 0.0}
@COORDINATES { 0.09, -0.15, 0.0}
@COORDINATES {-0.09, -0.15, 0.0}
@COORDINATES {-0.03, -0.05, 0.0}
@COORDINATES {-0.20, -0.05, 0.0}
@COORDINATES {-0.20, 0.05, 0.0}
@COORDINATES {-0.10, 0.10, 0.0}
}
@KNOT_SEQUENCE_DEFINITION {
@KNOT_SEQUENCE {0.0, 0.0, 0.0, 0.0, 0.142857, 0.285714, 0.428751, 0.571429, 0.714286, 0.857143, 1.0, 1.0, 1.0, 1.0}
}
} #### Example 5.

The last example defined a curve using the global interpolation algorithm. The NURBS passes through five specified points. The resulting NURBS is shown in fig. 5.

@CURVE_NAME {example5} {
@IS_DEFINED_IN_FRAME {INERTIAL}
@POINT_DEFINITION {
@NUMBER_OF_CONTROL_POINTS {5}
@DEGREE_OF_CURVE {3}
@RATIONAL_CURVE_FLAG {NO}
@COORDINATES {0.0, 0.0, 0.0}
@COORDINATES {0.2, 0.3, 0.0}
@COORDINATES {0.4, 0.6, 0.0}
@COORDINATES {0.5, 0.2, 0.0}
@COORDINATES {1.0, 0.0, 0.0}
@SPLINE {YES}
}
} 