```
CHAPTER  2 PARAMETRIC  CURVES

This  chapter introduces the types of parametric curves  which
can  be  defined in the Sculptured  Surfaces  system.    These
curves   will  be  used  in  subsequent  chapters  to   define
sculptured  surfaces  patches  and for machine  tool  control.
Section  2.1 is concerned with conic arcs defined by a  CURSEG
statement.    Section 2.2 introduces spline curves and Section
2.3 is concerned with compound curves.    The internal storage
of the curves is considered in Section 2.4 where the canonical
array  is described in detail;   the material in this  section
may  be omitted by those whose main interest is in the use  of
the system.

2.1  CONIC ARCS.  (CURSEG DEFINITION)

A conic is a plane curve which can in two dimensional space be
represented  by a quadratic equation in x  and  y.    Possible
types  of  curve  are  straight  lines,   circles,   ellipses,
parabolas  and  hyperbolas,  all of which can be  obtained  as
plane  sections  of a cone.    The Sculptured Surfaces  system
makes  it  possible to precisely define arcs of any  of  these
curves,  the  type of curve produced being dependent upon  the
input data.  Note that in all cases an arc of finite length is
defined,  not  the  complete  conic.    Essential  differences
between  these curves and the conic definitions  described  in
volume  1 chapter 9 are their finite length and the fact  that
the curve need no longer be defined in the xy  plane, but must
still be a plane curve.

The general form of the definition is

CNAME = SCURV/CURSEG, followed by 5 or less points and
associated vector constraints.

2.1.1  PARAMETRIC LINE

If  the  CURSEG  definition contains only two points  with  no
tangent  or normal constraints,  the resulting conic  arc  can
only be the straight line connecting these points.

13

blank

14

For  example,  the line connecting the point P1 with cartesian
co-ordinates (2,3,4) to the point P2 with co-ordinates (5,2,6)
could be defined by

P1  =  POINT/2,3,4

P2  =  POINT/5,2,6

L1  =  SCURV/CURSEG,P1,P2

or by

L1  =  SCURV/CURSEG,(POINT/2,3,4),(POINT/5,2,6)

In  either case L1 is a parametric representation of the  line
from P1 to P2.    P1 corresponds to the parameter value t = 0,
P2  has  parametric value t = 1 and  all  intermediate  points
along the line correspond to values of the parameter between 0
and 1.    Provided P1 and P2 are distinct points, there can be
no error states with this form of the CURSEG definition.

2.1.2  CIRCULAR ARCS

If  the  CURSEG definition contains precisely  3  constraints,
which may be 3 points, 2 end points and a tangent vector, or 2
points  and  a  normal direction;   a unique circular  arc  is
defined.    Once  more  this is a parametric  curve  with  the
parameter ranging from 0 to 1 along the arc.

The  simplest definition of a circular arc is in terms of  its
two  end points and an intermediate point.    For example  the
points  (-2,4,1),(5,5,1) and (7,1,1) are on a circle of radius
5 with centre at (2,1,1) in the plane z = 1 which is  parallel
to  the X-Y plane.    This circular arc is defined by the part
program

PARTNO CIRCLE

P1  =  POINT/-2,4,1

P2  =  POINT/5,5,1

P3  =  POINT/7,1,1

C1  =  SCURV/CURSEG,P1,P2,P3

FINI

The resulting arc is shown in Figure 2.1.    The corresponding
verification listing is shown overleaf

15

Figure 2.1

16

VERIFICATION LISTING FOR SCURV C1

1.000  =  1.  APT FILE RECORD NUMBER

1.000  =  2.  NUMBER OF BLOCKS FOR HEADER

3.000  =  3.  1 = COMBIN, 2 = SPLINE, 3 = CURSEG

1.000  =  4.  NUMBER OF CUBIC ARCS

25.000  =  5.  LOCATION OF FIRST CUBIC ARC

0.000  =  6.  NUMBER OF ROWS FOR FLOW DATA

0.000  =  7.  LOCATION OF FIRST FLOW ROW

0.000  =  8.  NUMBER OF ROWS FOR SEGMENTS

0.000  =  9.  LOCATION OF FIRST ROW OF SEGMENTS

0.000  = 10.  TOTAL NUMBER OF FLOW SPLINES

0.000  = 11.  LOCATION OF FIRST FLOW SPLINE

48.000  = 12.  TOTAL SIZE OF STRUCTURE

1.000  = 13.  FIRST LOCATION OF STRUCTURE

CURVE SHAPE-DISPLAYED BY CUBIC ARCS

PARAM   XCOORD  YCOORD  ZCOORD    UTAN-I   UTAN-J    UTAN-K

ARC NUMBER 1

0.0000 -2.0000  4.0000  1.0000    0.6000    0.8000   0.0000
0.2500  0.1918  5.6616  1.0000    0.9323    0.3616   0.0000
0.5000  3.5811  5.7434  1.0000    0.9487   -0.3162   0.0000
0.7500  6.2435  3.6443  1.0000    0.5289   -0.8487   0.0000
1.0000  7.0000  1.0000  1.0000   -1.0000    0.0000   0.0000

0.8000   -0.6000    0.0000    0.2000    5.000
0.3616   -0.9323    0.0000    0.2000    5.000
-0.3162   -0.9487    0.0000    0.2000    5.000
-0.8487   -0.5239    0.0000    0.2000    5.000
-1.0000    0.0000    0.0000    0.2000    5.000

---END OF SYNTHETIC CURVE VERIFICATION---

17

Figure 2.2

18

The  entries  in the header table of this listing  are  mainly
concerned with the contents of the canonical array which  will
be  described in section 2.4.    The geometric data gives  for
points on the curve the parameter value, the co-ordinates, the
3 components of a unit vector in the direction of the tangent,
the  components  of  a  unit vector normal to  the  curve  and
finally the curvature and radius of curvature.   Note that the
curvature  is  the reciprocal of the radius of  curvature  and
that in this case the radius of curvature is given as 5.0  for
all  points along the curve.    This geometric data is  always
given for the two end points of the arc and for 3 intermediate
points at equally spaced parameter values.    In this case the
point P2 is not displayed but its parameter value clearly lies
between t = 0.5 and t = 0.75.

The same circular arc can be defined in other ways by defining
the two end points and either a tangent or normal direction at
one of these points.

The statements

P1  =  POINT/-2,4,1

P3  =  POINT/7,1,1

T1  =  VECTOR/3,4,0

C2  =  SCURV/CURSEG,P1,TANSPL,T1,P3

will  define precisely the same circular arc with an identical
verification listing.   The resulting curve is shown in Figure
2.2.

The word TANSPL in the definition of C2 identifies the  vector
T1 as a tangent vector at the point P1.

19

Figure 2.3

20

The third alternative definition would be

P1  =  POINT/-2,4,1

P3  =  POINT/7,1,1

N2  =  VECTOR/-1,0,0

C3  =  SCURV/CURSEG,P1,P3,NORMAL,N2

From  Figures 2.2 and 2.3,  the normal to the circle at P3  is
seen  to be parallel to the x axis and N2 defines a vector  in
this direction.    The definition of C3 identifies N2 not only
as the normal to the curve at P3 but also as the normal to any
sculptured surface which is subsequently defined as containing
the  curve C3.    Figure 2.3 shows the curve defined by  these
statements.

Note  that  with the CURSEG definition it is not  possible  to
define  a complete circle as a single circular  arc,  although
arcs  up  to  180  degrees can be defined in  this  way.    An
attempt  to define too large an arc by the 3 point  definition
produces the error message:

DEFINITION ERROR 5910

THE  MID  POINT OF THREE CONSECUTIVE POINTS PROJECTED  OUTSIDE
THE RANGE OF THE SURROUNDING TWO.

If  a  complete circle is required it can be defined as  2  or
more  arcs  which are then joined by a COMBIN  statement  (see
Section 2.3).

2.1.3 GENERAL CONIC DEFINED BY 5 CONDITIONS

A  unique conic arc can generally be drawn through 5  coplanar
points. The same arc could also  be defined by any appropriate
combination  of  5  constraints made  up  of  points,  tangent
directions  or  normal  directions.     For  a  proper  CURSEG
definition the two end points must be defined and the possible
alternative definitions reduce to

5 points

4 points and a tangent or normal

3 points and two tangents or normals.

Depending upon the actual constraints the resulting curve will
be an arc of a circle, ellipse, parabola or hyperbola.

21

Figure 2.4

Figure 2.5

22

The statements

P1  =  POINT/-4,0.71,0.71
P2  =  POINT/-3,2.11,-0.69
P3  =  POINT/-1,2.76,-1.34
P4  =  POINT/0,2.83,-1.41
P5  =  POINT/2,2.55,-1.13
C1  =  SCURV/CURSEG,P1,P2,P3,P4,P5

define  an elliptic arc in the plane y+z = 1.42;  this arc  is
shown in Figure 2.4.

Note  that  when  defining  a conic arc  in  this  way  it  is
essential that the 5 points should lie in a plane.  If this is
not  the case an error message (DEFINITION ERROR 5751) will be
produced.

As  an  example  of a conic arc defined by  a  combination  of
points  and vector constraints the statements below  define  a
conic, in fact a hyperbola, in the plane z = 2

P1  =  POINT/1,6,2
P2  =  POINT/2,3,2
P3  =  POINT/3,2,2
V1  =  VECTOR/2,-3,0
V2  =  VECTOR/2,3,0
C2  =  SCURV/CURSEG,P1,P2,TANSPL,V1,P3,NORMAL,V2

This  curve is illustrated in Figure 2.5.    The  verification
listing for this curve contains the geometric data:

PARAM    XCOORD   YCOORD   ZCOORD    UTAN-1   UTAN-J  UTAN-K

0.0000   1.0000   6.0000   2.0000    0.1644   -0.9864  0.0000
0.2500   1.2581   4.7691   2.0000    0.2551   -0.9669  0.0000
0.5000   1.6154   3.7142   2.0000    0.3988   -0.9170  0.0000
0.7500   2.1429   2.7999   2.0000    0.6078   -0.7941  0.0000
1.0000   3.0000   2.0000   2.0000    0.8321   -0.5547  0.0000

0.9864    0.1644    0.0000    0.0533    18.755
0.9669    0.2551    0.0000    0.1000     9.999
0.9170    0.3988    0.0000    0.1806     5.537
0.7941    0.6078    0.0000    0.2738     3.653
0.5547    0.8321    0.0000    0.2560     3.906

Note  that  unlike the earlier circular example the radius  of
curvature now varies continuously along the curve.  The  local
centre  of curvature lies along the normal vector (UNORM) at a
distance equal to the radius of curvature.

23

24

If  the  definition of V2 is changed to V2 =  VECTOR/3,2,1  so
that  it  defines a vector which is not in the  plane  of  the
curve,  an  attempt to run the corresponding part program will
produce the error message:

DEFINITION ERROR 5752

IN A 'CURSEG' DEFINITION ALL OF THE TANGENT CONSTRAINTS DO NOT
LIE IN A PLANE.

This message could be misleading since on this occasion it  is
the  normal which is out of the plane of the rest of the  data
but it does indicate that one of the two vector constraints is
erroneous.    Even  when  the 5 constraints are  coplanar  and
define  a  proper conic,  the CURSEG definition can  still  be
invalid.    For  example the points (-6,-2),  (-4,-3),  (2,6),
(3,4)  and (6,2) all lie on the rectangular hyperbola xy =  12
but the statements

P1  =  POINT/-6,-2,0
P2  =  POINT/-4,-3,0
P3  =  POINT/2,6,0
P4  =  POINT/3,4,0
P5  =  POINT/6,2,0
C1  =  SCURV/CURSEG,P1,P2,P3,P4,P5

will produce the error message:

DEFINITION ERROR 5910

THE MID POINT OF THREE CONSECUTIVE POINTS PROJECTED OUTSIDE
THE RANGE OF THE SURROUNDING TWO.

The explanation is that a hyperbola has two separate  sections
and  in  this case P1 and P2 are in one section of  the  curve
whilst  P3,P4,P5  are in the other section,  there can  be  no
continuous arc through these points.

25

Figure 2.6

26

2.1.4  CONIC ARCS DEFINED BY 4 CONDITIONS

This   is  the  potentially  ambiguous  case  of  the   CURSEG
definitions.     Whereas  2  points define a  unique  line,  3
points a unique circular arc and 5 points a unique conic it is
possible to fit many different conics to 4 data points.    The
ambiguity  is  removed by selecting the ellipse,  or  in  some
extreme cases the parabola, of minimum eccentricity which fits
the input data.    (The eccentricity of an ellipse is  related
to  the ratio of the lengths of the major and minor axes;  the
greater  this ratio the greater the eccentricity).    Since  a
circle  is  an ellipse of eccentricity O this implies  that  a
circular  arc  will  be produced whenever the  input  data  is
consistent with this result.

Example:

P1  =  POINT/-2,4,1
P2  =  POINT/5,5,1
P3  =  POINT/7,1,1
T1  =  VECTOR/3,4,0
C1  =  SCURV/CURSEG,P1,TANSPL,T1,P2,P3

This  is a 4 constraint CURSEG definition consistent with  the
circular arc defined in Section 2.1.2 and the results will  be
identical.    In  general  the 4 constraints in this  type  of
definition can be:

4 points

3 points and 1 tangent or normal

2 end points and 2 tangents or normals.

Example:

P1  =  POINT/-4,0.71,0.71
P2  =  POINT/2,2.55,-1.13
T1  =  VECTOR/0,1,-1
T2  =  VECTOR/1,-0.3,0.3
C2  =  SCURV/CURSEG,P1,TANSPL,T1,P2,TANSPL,T2

These statements define an elliptic arc from P1 to P2 with end
tangents  in the directions of T1 and T2  respectively.    The
resulting curve is illustrated in Figure 2.6.

The  error messages which can be produced from these types  of
CURSEG definition are precisely the same as those described in
Section  2.1.3.    The usual sources of error are non-coplanar
constraints or data points inconsistent with a single arc.

27

28

2.2  SPLINE CURVES

The  most  general type of synthetic curve definition  is  the
SCURV/SPLINE definition.    This defines the curve as a spline
curve  each arc of which is a cubic  parametric  curve.    The
number  of arcs in the curve will be one less than the  number
of  points in the definition.    At the data points the curves
are  continuous  and  share a  common  tangent  direction  but
continuity of the curvature is only approximate.

Unlike the CURSEG definitions there is no requirement that the
input data should be coplanar and the SPLINE definition can be
used  to define a twisted curve in 3 dimensional space.    The
maximum  number of points in a spline definition is 30,  which
implies a maximum of 29 for the number of arcs.   If required,
longer  spline  curves  can be produced by  using  the  COMBIN
statement described in Section 2.3.

2.2.1  SIMPLE EXAMPLE

A simple 2 points SPLINE definition will produce precisely the
same  straight  line as the corresponding  CURSEG  definition.
With  3  or  more  points the results  produced  by  a  SPLINE
definition  will not coincide with the conic arcs produced  by
CURSEG.    For  example,  using the same 3 data points  as  in
Section 2.1.2 the statements:

P1  =  POINT/-2,4,1
P2  =  POINT/5,5,1
P3  =  POINT/7,1,1
C1  =  SCURV/SPLINE,P1,P2,P3

produce in their verification listing:

29

Figure 2.7

Figure 2.8

30

CURVE SHAPE-DISPLAYED BY CUBIC ARCS

PARAM    XCOORD   YCOORD   ZCOORD    UTAN-I  UTAN-J  UTAN-K

ARC NUMBER 1

0.0000  -2.0000   4.0000   1.0000    0.7894   0.6139  0.0000
0.2500  -0.2183   5.0581   1.0000    0.9161   0.4009  0.0000
0.5000   1.6842   5.6213   1.0000    0.9882   0.1535  0.0000
0.7500   3.4946   5.6239   1.0000    0.9847  -0.1743  0.0000
1.0000   5.0000   5.0000   1.0000    0.8007  -0.5990  0.0000

0.6139   -0.7894    0.0000    0.1244    8.042
0.4009   -0.9161    0.0000    0.1195    8.371
0.1535   -0.9882    0.0000    0.1473    6.790
-0.1743   -0.9847    0.0000    0.2266    4.414
-0.5990   -0.8007    0.0000    0.3373    2.965

ARC NUMBER 2

0.0000  5.0000    5.0000    1.0000    0.8007  -0.5990  0.0000
0.2500  5.7046    4.2612    1.0000    0.5784  -0.8158  0.0000
0.5000  6.2392    3.3000    1.0000    0.4064  -0.9137  0.0000
0.7500  6.6541    2.1888    1.0000    0.3049  -0.9524  0.0000
1.0000  7.0000    1.0000    1.0000    0.2631  -0.9648  0.0000

-0.5990   -0.8007    0.0000    0.3631    2.754
-0.8158   -0.5784    0.0000    0.2395    4.175
-0.9137   -0.4064    0.0000    0.1293    7.733
-0.9524   -0.3049    0.0000    0.0601   16.652
-0.9648   -0.2631    0.0000    0.0123   80.891

The  most obvious difference from the results in Section 2.1.1
is that the curve is now listed as 2 separate arcs joining  at
P2.    More  detailed  examination  shows that the  radius  of
curvature is no longer constant showing that the curve is  not
part  of a circle.    For each arc the parameter ranges from 0
to  1, the point P2 corresponding to parameter t =  1  on  the
first  arc  and  t = 0 on arc number 2.    At this  point  the
tangent vectors are clearly the same but there is a  curvature
variation between the arcs.

The  curve  defined is displayed in Figure 2.7.

Figure   2.8   shows   this  curve   superimposed   upon   the
corresponding  circular  arc  which highlights  the  geometric
distinction.

31

Figure 2.9

Figure 2.10

32

2.2.2  SPLINE CURVES WITH VECTOR CONSTRAINTS

If  the input data does not specify the directions of the  end
tangents  for  a  SPLINE curve the system  will  automatically
determine  appropriate  directions.     These  are    computed
internally  by  fitting a parabolic arc to the 3  data  points
nearest the end and equating the end tangent to the tangent of
this parabola.

The user can directly control the direction of the end tangent
by setting the TANSPL to the desired vector value.

Example:

P1  =  POINT/0,1,0

P2  =  POINT/2,3,1

P3  =  POINT/4,7,4

P4  =  POINT/5,8,3

P5  =  POINT/6,8,2

T1  =  VECTOR/1,3,0

T5  =  VECTOR/2,-5,1

C2  =  SCURV/SPLINE,P1,TANSPL,T1,P2,P3,P4,P5, \$
TANSPL,T5

This  defines a twisted spline curve of 4 separate arcs  which
is shown in Figures 2.9 and 2.10.   The two views clearly show
that this is not a plane curve.

Note that the lengths of the tangent vectors have no effect on
the   curve   being  defined;    the   tangent   lengths   are
automatically  adjusted  by  the processor  after  definition.
The  shape  of the curve can be modified by  moving  the  data
points or by introducing new constraints.   We could introduce
a tangent constraint at P3 by defining:

T3  =  VECTOR/2,1,1

and redefining the curve as

C3  =  SCURV/SPLINE,P1,TANSPL,T1,P2,P3,TANSPL,   \$
T3, P4,P5,TANSPL,T5

33

Figure 2.11

Figure 2.12

34

This change means that the curve is now in fact defined as two
separate  spline curves one from P1 to P3 and the second  from
P3 to P5.  Both curves have the specified tangent direction at
P3.   The result is illustrated in Figures 2.11 and 2.12.

The  verification listing shows curvatures of 0.16 and  4.2492
at  P3 in arcs 2 and 3 respectively.    This abrupt change  in
curvature  is due to the processor treating P1 to P3 and P3 to
P5  as distinct curves.    The verification  listing  confirms
that  the effect of the additional constraint is to change the
entire curve, not just the sections between P2 and P4.

Other  vector constraints which can be imposed at points in  a
spline  curve,  or end points of a CURSEG  curve,  are  NORMAL

A  NORMAL constraint is not a direct constraint on the  normal
to the curve,  it is specifying the direction of the normal to
any  surface subsequently defined using a GENCUR definition or
to  any MESH surface having this spline curve as part  of  its
definition.    Since  the tangent to any curve in the  surface
must  be  perpendicular  to the  surface  normal,  the  NORMAL
constraint  is a partial constraint on the tangent  direction.
As  with a TANSPL constraint the effect of including a  NORMAL
constraint  at an interior point of a spline curve is to split
the curve into 2 separate spline curves.   A CRSSPL constraint
has  no effect upon the curve currently being defined,  it  is
specifying  the direction of the tangent to the  cross  spline
curve (the 2nd parametric family of curves on the biparametric
surface)  at  that  particular point.    For  a  well  defined
surface  the CRSSPL direction should not be nearly parallel to
the  tangent vector at the point concerned.    (See Chapter  5
for further details).

As  an  example,   if  with  the  previous  point  and  vector
definitions we define

the result is an identical curve to C2.

All  the  examples given so far have included  only  a  single
vector  constraint at a given point but the most general  form
of  the SCURV statement allows a SPLINE curve,  or a CURSEG to
be  input  with up to 3 vector  constraints  (TANSPL,  NORMAL,
CRSSPL) at each point.    Particular care should be taken when
inputting  multiple  vector constraints including  the  NORMAL
because the directions of the TANSPL and CRSSPL vectors should
be at right angles to the normal.   If the input data does not
satisfy this condition the directions of the TANSPL and CRSSPL
are  automatically  adjusted,  by  projecting  them  onto  the

35

tangent plane with the specified normal,  before defining  the
parametric curve.    The result is a curve which does not have
the chosen tangent properties.

If  both TANSPL and NORMAL are included at a point of a CURSEG
curve  the TANSPL is used to determine the plane of the  curve
provided  the direction of the TANSPL is consistent  with  the
NORMAL.    In  this way it is possible to specify a  direction
for  the surface normal which is not in the plane of the conic
arc.    The example below illustrates the effect of  including
inconsistent   TANSPL  and  NORMAL  constraints  in  a  CURSEG
definition.

P1  =  POINT/-2,4,0

P2  =  POINT/5,5,0

P3  =  POINT/7,1,0

T1  =  VECTOR/3,4,0

V1  =  VECTOR/1,2,3

C1  =  SCURV/CURSEG,P1,TANSPL,T1,NORMAL,V1,P2,P3

Running a part program including these statements produces the
error message

DEFINITION ERROR 5752

IN A 'CURSEG' DEFINITION ALL OF THE TANGENT CONSTRAINTS DO NOT
LIE IN A PLANE.

This  message  is clearly false since the 3 points  lie  on  a
circular  arc of radius 5 centred at the point (2,1,0) in  the
plane z = 0 and T1 is the correct tangent vector.   However V1
is not orthogonal to T1 (the scalar product is 3x1 + 4x2 + 0x3
which  is non zero, and the system has automatically  modified
T1 to the new direction (0.5475, 0.6005, -0.5828) , not in the
plane z = 0,  before attempting to construct the curve.   This
direction can be verified by modifying the definition of C1 to
define  a SPLINE curve;  the direction is computed from T1  by
subtracting  its  component  in the  direction  of  V1.    The
intended  circular  arc  is  obtained  from  this  example  by
replacing  V1  by  any  vector,  such  as  (-4,3,2)  which  is
orthogonal to T1.

36

2.2.3  SEGMENTS OF LINES AND CIRCLES - THE SEG DEFINITION

A  third  method of defining a simple parametric SCURV in  the
Sculptured  Surfaces  system makes use of the  APT4  geometric
definitions of lines and circles.    The SEG definition  makes
it  possible  to define a parametric curve as a segment  of  a
line  or circle but this definition only applies to curves  in
the  xy  plane (z=0).    The curve and the end points are  all
defined  in  terms of APT4 geometries.    The end  points  are
determined  by finding the intersection with another  line  or
circle.    Since, in general, a circle intersects another line
or  circle  in  two  points the potential  ambiguity  in  this
definition is removed by using the qualifiers POSX, NEGX, POSY
or  NEGY.    POSX is interpreted as an instruction  to  select
from  the two intersection points the one which has the larger
x coordinate (which need not be positive).    NEGX selects the
point  with the smaller x coordinate.    POSY and NEGY make  a
similar  selection based upon the y coordinates.    Note  that
even in the simple case of two intersecting lines,  the format
of the input statement requires one of these qualifiers to  be
present.

The  general  form  of  the definition statement  is

CNAME  = SCURV/SEG,CURVE1,CURVE2,qualifier,CURVE3,qualifier

where CURVE1,CURVE2,CURVE3 are the names of previously defined
APT4  circles  or lines and each qualifier takes  one  of  the
values POSX,NEGX,POSY or NEGY.    The parametric curve is then
defined as the segment of CURVE1 between its intersection with
CURVE2 and its intersection with CURVE3.

Example:

L1  =  LINE/-1,0,0,2,3,0

S1  =  SCURV/SEG,C2,C1,NEGY,L1,POSY

The three APT4 construction curves defined here all lie in the
plane  z=0.    L1  is an infinite line of unit  slope  passing
through the points (-1,0) and (2,3) in the xy plane.   C1 is a
circle  of  radius 5 centred at the origin and C2 is a  circle
centred  at (2,2) and of radius 4.    Figure 2.13 shows  these
curves and their interestions.   S1 is defined as the shortest
segment  of  C2 which lies between the lower  intersection  P1
with  C1  and  the  higher  intersection  P2  with  L1.  These
intersections  are uniquely identified by the use of NEGY  and

37

Figure 2.13

Figure 2.14

38

POSY  respectively.    Precisely  the same circular arc  could
have been defined by the statement

S1  =  SCURV/SEG,C2,C1,POSX,L1,POSX

The resulting curve is illustrated in Figure 2.14.

A  careful  examination of the verification listing  for  this
curve  shows  that  internally it is represented by  a  simple
CURSEG  definition consisting of the two end points P1 and  P2
and the tangent vector at P1.   The first part of this listing
is:

VERIFICATION LISTING FOR SCURV S1

0.000  =  1.  APT FILE RECORD NUMBER

1.000  =  2.  NUMBER OF BLOCKS FOR HEADER

3.000  =  3.  1 = COMBIN, 2 = SPLINE, 3 = CURSEG

2.000  =  4.  NUMBER OF CUBIC ARCS

CANONICAL ARRAY FOLLOWS

INDEX = 1
0.000  1.000  3.000  2.000          0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000          0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.0000
INDEX = 25
4.951 -0.701  0.000  0.000         -2.701 -2.951  0.000  1.000
0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000          1.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
INDEX = 49
4.284  5.284  0.000  0.000          0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000          1.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000

(Note:  in the original print-out this data is arranged with 3
blocks  of 4 numbers per row.)

39

blank

40

The  third entry in the header table identifies the curve as a
CURSEG (i.e.  conic arc) type.    The 4th entry in fact refers
to the number of points rather than the number of arcs as  the
caption   suggests.     The  detailed  interpretation  of  the
canonical  array will be explained in  section  2.4.  Elements
from  index 1 to 24 refer to the header block,  elements 25 to
48  are  associated  with the first point  of  the  curve  and
elements  49 to 72 refer to P2.    P1 is identified as  having
co-ordinates (4.951,-0.701,0.000) with a tangent vector in the
direction  (-2.701,-2.951,0,000).   P2 is identified as having
coordinates  (4.284,5.284,0.000)  with no  tangent  or  normal
constraint.    As  far as the sculptured surfaces processor is
concerned  the  curve is now indistinguishable from  a  CURSEG
circular arc defined by two points and a tangent vector.   The
final verification listing is identical to that produced  from
the corresponding CURSEG definition.

2.2.4  RETRIEVAL OF GEOMETRIC DATA FROM CURVES

Provision  is  made in the sculptured surfaces  processor  for
geometric  data to be extracted from any point of a parametric
curve  (SCURV).    This data is obtainable by using the  INTOF
command  together  with  a parameter  value  to  identify  the
particular point on the curve.   If the curve has been given a
FLOW  value  (see  Chapter 3) the point on the  curve  may  be
referenced  by  a  FLOW value rather than a  simple  parameter
value.       Vectors     associated     with     the     curve
(TANSPL,NORMAL,CRSSPL or BINORM) can be obtained in a  similar
way.    Once  this  data has been obtained it can be  used  in
further   geometric   definitions   or   for   tool    control
applications.   To  extract  the co-ordinates of a  point  the
format of the command is

PNAME  =  POINT/INTOF,CNAME,PARAM,u,N

where PNAME is the assigned point name,  CNAME is a previously
defined  SCURV,  u is the parameter value and N is an  integer
identifying  the arc of the curve.    In the simplest cases  N
will be the actual arc number and u will have a value  between
0 and 1 to identify the particular point of the arc.

41

Figure 2.15

42

For example, the values u = 0.5, N = 2 refer to the parametric
mid  point  of the second arc of the curve.    An  alternative
method of referring to the same point is to set N = 0 and u  =
1.5;  in  this case the value N = 0 signals that the parameter
will take values between 0 and 1 on the first arc,  1 and 2 on
the second arc and so on.   A third method of referring to the
same  point is by counting the arcs from the other end of  the
curve.    If the curve had 4 arcs the values u = 0.5,   N = -3
would refer to precisely the same point.   If the reference is
by  FLOW  value  the  word PARAM in  the  INTOF  statement  is
replaced  by FLOW;  the interpretation of u and N  is  exactly
similar  except  that  u  now refers to a value  of  the  FLOW
parameter.

As  defined,  a parametric SCURV is a bounded curve but it  is
possible  to  refer to points beyond the  extremities  of  the
curve.    In  such a case the curve is continued as a straight
line by extending its end tangent vector.    A negative  value
of  u  refers  to a point on the linear extension  before  the
start of the curve and a value of u greater than 1 (or greater
than  the parametric range if N = 0) refers to a point on  the
linear  extension beyond the end of  the  curve.    Individual
arcs of the curve can be extended in the same way.

Example:

C1 = SCURV/SPLINE,(POINT/1,2,0),(POINT/2,3,1), \$
(POINT/3,5,2),(POINT,6,5,4),(POINT/7.3.4)                     -

P1 = POINT/INTOF,C1,PARAM,0.6,1
P2 = POINT/INTOF,C1,PARAM,2.4,0
P3 = POINT/INTOF,C1,PARAM,1.5,4
P4 = POINT/INTOF,C1,PARAM,1.8,1
P5 = POINT/INTOF,C1,PARAM,-0.7,0

The  points  referenced by the above statements are  shown  in
Figure 2.15.   C1 is a spline curve consisting of 4 arcs.   P1
is  an  interior point of the first arc.    P2 is an  interior
point of the third arc.   P3 is on the linear extension of the
4th arc (i.e. beyond the end of the curve).   P4 is a point on
the  tangent  at  the end of the first arc and P5  is  on  the
linear extension before the start of the curve.   Note that P2
could   also  have been referred to by the u,N values 0.4,3 or
0.6,-2.    Vector  functions  associated with  the  curve  are
evaluated in a similar manner.   For example

V1 = VECTOR/INTOF,C1,PARAM,0.6,1,TANSPL

sets V1 equal to the value of the tangent vector to the  curve
C1  at  the point in the first arc with parametric value  0.6.
If a unit vector is required this is achieved by the statement

43

Figure 2.16

44

V1 = VECTOR/INTOF,C1,PARAM,0.6,1,TANSPL,UNIT

The word TANSPL in this statement can be replaced by the words
NORMAL,  BINORM  or CRSSPL where NORMAL refers to the  surface
normal at this point, BINORM denotes the binormal to the curve
(normal  to the circle of curvature at this point) and  CRSSPL
is  the direction of the tangent to the cross-spline curve  at
the designated point.    TANSPL and BINORM should be available
at  all points of a curve but NORMAL and CRSSPL are  generally
only available at the ends of arcs where they have  previously
been input.

2.3  COMBIN CURVES

Previous sections have introduced the simple SCURV definitions
of  CURSEG,  SPLINE  or SEG to define a continuous  parametric
curve.   More complex curves can be constructed by joining two
or  more of these curves together using the COMBIN  statement.
The general format for this is

CNAME = SCURV/COMBIN,C1,C2,...,CN

where  CNAME  is the chosen name for the  compound  curve  and
C1,C2,...,CN  are  previously  defined SCURVs of  any  of  the
standard  types.    It  is quite permissible to mix curves  of
different types within a single COMBIN statement but it is  up
to  the  user to ensure the appropriate continuity  conditions
between the separate curves at their junction points.

2.3.1  SIMPLE EXAMPLE

P1  =  POINT/0,0,0
P2  =  POINT/2,0,0
P3  =  POINT/3,4,1
P4  =  POINT/4,6,2
V1  =  VECTOR/1,1,0
C1  =  SCURV/CURSEG,P1,P2
C2  =  SCURV/SPLINE,P2,TANSPL,V1,P3,P4
C3  =  SCURV/COMBIN,C1,C2

In the above example C1 is defined as the line from P1 to  P2.
C2  is  the  spline curve passing through P2,P3  and  P4  with
specified  tangent vector V1 at P2.   C3 is then the  compound
curve  formed by combining C1 and C2,  which is illustrated in
Figure  2.16.    Since the end of C1 coincides with the  first
point  of  C2 the curve C3 is continuous but the curve  has  a
slope  discontinuity at this point.    This  discontinuity  of
tangent  direction  can only be removed by re-defining  V1  as
(1,0,0) so that the tangent vector is in the same direction as
the line P1P2.

45

The verification listing for C3 shows a curve consisting of  3
arcs.   For the first arc the curve is identical to C1 and the
second and third arcs coincide with the two arcs of C2.    The
listing also contains the message:

DEFINITION WARNING 5129

THE TANGENT VECTORS AT THE JUNCTION OF CONSECUTIVE CURVES IN A
'COMBIN' DEFINITION HAVE DIFFERENT DIRECTIONS

This  is,  however,  only  a  warning message and  the  normal
processing  can continue using this  curve  definition.    If,
however, the first point of C2 is changed the message produced
by the processor is:

DEFINITION ERROR 5128

THE  JUNCTION  POINTS  OF TWO CONSECUTIVE CURVES  IN  'COMBIN'
DEFINITION DID NOT MATCH

This  is now a fatal error which halts further  processing  of
the program.

2.3.2  APPLICATIONS OF COMBIN CURVES

Apart  from  the obvious application of making it possible  to
join curves of different types together,  the COMBIN  facility
has  a variety of uses.    The fact that the COMBIN definition
permits  tangent discontinuities at junction points  makes  it
possible to use curves of this type to produce surfaces with a
'high  line' or feature line.    When used in conjunction with
CURSEG definitions COMBIN can be used to produce a curve  each
segment of which is a conic arc.   For example,  a rectangular
profile  with rounded corners could be produced by combining 4
line  segments with 4 quadrants of  circles.    Although  each
separate  conic  segment  is a planar curve the  final  COMBIN
curve need not be planar.    A complete circle can be  defined
as the COMBIN of two semi-circles.

COMBIN  may also be used to overcome the limitation of  having
no  more  than 30 points in a  SPLINE  curve.    A  continuous
spline  curve through a large number of points can be produced
by  first  dividing the points into sets of 30  or  less.    A
SPLINE  curve is then defined on each set of points  in  turn.
Tangent  continuity can be ensured by making use of the  INTOF
facility  to  extract  the TANSPL vector at the  end  of  each
spline curve.    This vector is then used as an initial TANSPL
constraint when defining the next SPLINE curve.

46

Finally,  the  separate  curves are joined as a COMBIN  curve.
As an example:

C1  =  SCURV/SPLINE,P1,P2,....,P30

V1  =  VECTOR/INTOF,C1,PARAM,1,-1,TANSPL

C2  =  SCURV/SPLINE,P30,TANSPL,V1,P31,...,P48

C3  =  SCURV/COMBIN,C1,C2

The  above statements would define C3 as a  continuous  spline
curve passing through the 48 points P1 to P48.

One  less obvious application of the COMBIN statement is  when
it is used with a single component curve.   If the curve C, of
3 arcs, has been previously defined, the statement

CF  =  SCURV/COMBIN,C,FLOW,ARC,0,3,SEG,0,3

can  be used to subsequently add a FLOW structure to C.    The
significance of FLOW will be described in Chapter 3.

2.4  CANONICAL ARRAYS USED FOR SCURV

Internally  the  computer  used  by  the  Sculptured  Surfaces
processor  stores  all  the  data  necessary  to  construct  a
parametric SCURV in a standardised format called the canonical
array.    Although  there are essentially 3 distinct types  of
SCURV namely CURSEG,  SPLINE and COMBIN they all have the same
internal data structure.    For each simple curve there are in
fact two associated canonical arrays which are printed out  as
part  of  the verification listing.    These are  the  interim
canonical  array which essentially contains the input data and
the  final canonical array which is used as a  data  structure
for  all  the internal geometric computations associated  with
the curve.

2.4.1  INTERIM SCURV ARRAY

Each of the canonical arrays is divided into blocks of 24 real
numbers.    The  first block in each case contains the  header
table and some details of its contents are printed out as part
of the verification listing.   The data in the header block is
relevant to the entire curve.    In the interim array there is
a  further block of data for each point of definition for  the
curve.    This  block contains all the input data relevant  to
that  particular  point  and the data is stored  in  a  simple
Cartesian  co-ordinate format.    The detailed nature of  this
data is best illustrated by a simple example.

47

P1  =  POINT/-2,4,1

P2  =  POINT/5,5,1

P3  =  POINT/7,7,1

V1  =  VECTOR/1,2,3

V2  =  VECTOR/3,4,0

V3  =  VECTOR/-4,3,0

C1  =  SCURV/SPLINE,P1,TANSPL,V2,NORMAL,V3,P2,   \$

These  statements  define C1 as a spline curve through  the  3
points P1,P2,P3 with vector constraints at P1 and P2.

The corresponding verification listing gives:

0.000  =  1.  APT FILE RECORD NUMBER

1.000  =  2.  NUMBER OF BLOCKS FOR HEADER

2.000  =  3.  1 = COMBIN, 2 = SPLINE, 3 = CURSEG

3.000  =  4.  NUMBER OF CUBIC ARCS
INDEX = 1
0.000  1.000  2.000  3.000        0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000. 0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
INDEX = 25
-2.000  4.000  1.000  0.000        3.000  4.000  0.000  1.000
0.000  0.000  0.000  0.000
4.000 -3.000  0.000  1.000        1.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
INDEX = 49
5.000  5.000  1.000  0.000        0.000  0.000  0.000  0.000
1.000  2.000  3.000  1.000
0.000  0.000  0.000  0.000        1.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
INDEX = 73
7.000  1.000  1.000  0.000        0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000        1.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000

48

Note  that  each block of the canonical array  consists  of  6
groups  of 4 real numbers.    In the line printer output  they
are arranged in two rows per block.    The captions at the top
of the canonical array identify the entries in the first group
of  the  header  block.    The APT file  record  number  is  a
reference  number  used for external storage of the  canonical
array;  it  is  0 in this case because the  interim  canonical
array  is  not saved.    All the other entries in  the  header
block are self explanatory except for 'NUMBER OF CUBIC  ARCS'.
This  caption in fact refers to the number of blocks after the
header block and is equal to the number of points defining the
curve.

The  index number of the first entry of each block  is  given.
point of the curve in a standard format.    The first group of
4  numbers  contains  the point co-ordinates in  its  first  3
locations.    The second group contains the TANSPL vector,  if
any, with the fourth entry 1.000 if a TANSPL is defined.   The
third and fourth groups contain equivalent data for the CRSSPL
and  NORMAL  constraints.     The  fifth  group  contains  the
'WEIGHT' in its first location;  the significance of this will
be  explained  in  Chapter  3 where  smoothing  of  curves  is
described.   For a simple curve the WEIGHT is 1.0.   The final
group  of the block is reserved for the original  co-ordinates
in  cases  where  the  data  point is  moved  in  a  smoothing
operation.

2.4.2  FINAL SCURV ARRAY

The  final  canonical  form is produced after  the  parametric
curve  has been processed.    Regardless of the type of  input
constraint  each  arc  of  the curve  is  represented  in  its
internal  format  by  the two end points  and  two  derivative
vectors.    In order to provide a common format for the CURSEG
and  SPLINE  data these points and vectors  are  described  in
terms  of homogeneous co-ordinates.    After the header block,
each  block of the canonical array corresponds to one  arc  of
the curve.    Continuing the example introduced in 2.4.1,  the
final part of the verification listing gives

49

1.000  =  1.  APT FILE RECORD NUMBER

1.000  =  2.  NUMBER OF BLOCKS FOR HEADER

2.000  =  3.  1 = COMBIN, 2 = SPLINE, 3 = CURSEG

2.000  =  4.  NUMBER OF CUBIC ARCS

25.000  =  5.  LOCATION OF FIRST CUBIC ARC

0.000  =  6.  NUMBER OF ROWS FOR FLOW DATA

0.000  =  7.  LOCATION OF FIRST FLOW ROW

0.000  =  8.  NUMBER OF ROWS FOR SEGMENTS

0.000  =  9.  LOCATION OF FIRST ROW OF SEGMENTS

0.000  = 10.  TOTAL NUMBER OF FLOW SPLINES

0.000  = 11.  LOCATION OF FIRST FLOW SPLINE

72.000  = 12.  TOTAL SIZE OF STRUCTURE

1.000  = 13.  FIRST LOCATION OF STRUCTURE

INDEX = 1
1.000  1.000  2.000  2.000       25.000  0.000  0.000  0.000
0.000  0.000  0.000  72.000
1.000  0.000  0.000  0.000        0.000  0.000  0.000  0.000
0.800 -0.600  0.000   1.000
INDEX = 25
-2.000  5.000  4.513  5.917        4.000  5.000  6.017 -4.521
1.000  1.000  0.000  0.000
1.000  1.000  0.000  0.000        0.267  0.535  0.802  1.000
0.000  0.000  0.000  0.000
INDEX = 49
5.000  7.000  3.222  1.309        5.000  1.000 -2.466 -4.799
1.000  1.000  0.000  0.000
1.000  1.000  0.000  0.000        0.000  0.000  0.000  0.000
0.000  0.000  0.000  0.000

50

Once  more  the contents of the header block are explained  by
the printed captions.    Locations 6 to 11 of the header block
relate  to flow and segment data and do not apply to a  simple
curve.    After the header block, the canonical array contains
one  block  of 24 numbers per arc of  the  curve.    Like  the
interim  array these blocks are sub-divided into 6 groups of 4
but  the significance of the individual groups  is  completely
different  in the final array.    For each arc of the curve  6
vector  quantities  can  be stored.    These are the  two  end
points,  the  derivative  of the  parametric  vector  function
defining  the  curve  at each end point and  (if  needed)  the
NORMAL and CRSSPL constraint vectors at the finish of the arc.
The co-ordinates and the derivatives are stored as homogeneous
co-ordinates  (X,Y,Z,W),  which  can be related,  for the  end
points, to the Cartesian co-ordinates (x,y,z) by the equations
x = X/W, y = Y/W and z = Z/W.    The first group in each block
contains  all the X co-ordinates,  the second group the Y  co-
ordinates,  the third group the Z co-ordinates and the  fourth
group the W coordinates.    Within each group of 4 numbers the
order is:

start point, end point, start derivative, end derivative.

In the above example data for the first arc starts in location
25 and the homogeneous co-ordinates (X0,Y0,Z0,W0) of the first
point are (-2,4,1,1) retrievable from locations (25,29,33,37).
Note that the co-ordinates of the second point are repeated as
the start point of the second arc.   The derivative vectors at
each  end  of  arc 1 have  homogeneous  co-ordinates   (4.513,
6.017,  0.000, 0.000)  and  (5.917, -4.521, 0.000, 0.000). The
first  of  these is a vector in the direction  of  the  TANSPL
constraint  vector (3,4,0) and the second is in the  direction
of the unit tangent vector (0.7966,  -0.6046, 0) at the end of
arc 1.    Note,  however, that the magnitudes of these vectors
have  changed  because the magnitude of the derivative  vector
influences the shape of the curve.    For a SPLINE curve the W
co-ordinate  of  each end point is always 1 and  the  first  3
components  of  the derivative vector always define a  tangent
vector.     The  final  two  groups  of  each  block   contain
respectively  a  unit CRSSPL vector and a unit NORMAL  vector.
These  vectors  relate to the final point of the arc  and  the
fourth  element  of each group is set to 1.0 to  indicate  the
presence of such a constraint vector.   For constraints at the
beginning  of the first arc the constraint vectors are  stored
in  the  last two groups of the header block.    Thus  in  the
above example,  elements 21 - 24 of the  header block are 0.8,
-0.6, 0, 1.0 which denotes the presence of a NORMAL constraint
in the direction (4,-3,0) at the beginning of the curve.

51

2.4.3  CURSEG CANONICAL ARRAY

For   a   conic  arc  defined  by  a  CURSEG   statement   the
interpretation  of the canonical array is less simple  because
the  W  co-ordinates  are  not simply 1  or  0.    This  is  a
consequence of the fact that the parametric function  defining
such  a  curve  has a rational quadratic form  rather  than  a
simple  cubic  form.    If we follow the example of 2.4.1  but
define C2 by the statement

C2 = SCURV/CURSEG,P1,TANSPL,V2,NORMAL,V3,P2,P3

the interim canonical array is very similar to that given  for
C1 except that the 3rd element is 3.0 and the CRSSPL vector is
omitted.     The  final  canonical  array,   however,  differs
considerably;  it is

INDEX = 1
2.000  1.000  3.000  1.000       25.000  0.000  0.000  0.000
0.000  0.000  0.000  48.000
1.000  0.000  0.000  0.000        0.000  0.000  0.000  0.000
0.800 -0.600  0.000   1.000
INDEX = 25
-2.089  7.312  8.803 10.000        4.179  1.045  2.214 -8.482
1.045  1.045 -1.429  -1.429
1.045  1.045 -1.429  1.429        0.000  0.000  0.000  0.000
0.000  0.000  0.000   0.000

The  most obvious difference from the data for C1 is that  the
canonical array now contains only two blocks because the curve
is  defined by a single arc.    The interpretation of the  arc
data in the second block is exactly the same as for C1 but the
numerical  values differ considerably.    The first point  now
has homogeneous co-ordinates (-2.089,4.179,1.045,1.045)  which
correspond, after division by W, to the Cartesian co-ordinates
(-2,4,1) of P1.  The first derivative vector (corresponding to
P1)  is  (8.803,2.214,-1.429,-1.429) which corresponds to  the
Cartesian  vector (-6.160,-1.549,1.000).    Unlike the  SPLINE
curve case this vector is not directly related to the  tangent
vector  at this point although it is possible to calculate the
tangent from the derivative vector and the co-ordinates of P1.

52
```