next up previous contents
Next: Plane Geometry Up: Geometrical Primitives Previous: Line Geometry   Contents

Curve Geometry

Conic sections are represented by the following generic structure

typedef struct conic
{
    Ts_id ts_id;                /* Tina structure identifier */
    unsigned int type;
    unsigned int label;
    int filler1;
    double a, b, c, d, e, f;   /* algebraic formula */
    double theta, alpha, beta;
    struct vec2 center;
    int filler2;
    double t1, t2;       /* conic params of p1 and p2 */
    int branch;          /* for hyperbola only */
    List *props;         /* property list */
} Conic;

In conic the arc covered by the curve is between angles t1 and t2 in radians). All angles are positive with 0 along the
x axis and *P/2 along the y axis. The arc goes from t1 to t2 in strictly ascending order, t1 will be less than 2 *P but
t2 may be larger than 2 *P if the arc passes back through the x axis.

In conic the implicit algebraic equation that represents its form is given by 13#13 theta is the angle of the major axis, alpha and beta are the lengths of the semi-major and semi-minor axis respectively, so the rotated, translated standard form of the conic equation is 14#14 The conic type can b any one of

ELLIPSE 
HYPERBOLA
DEGENERATE

with obvious meanings. The field branch is used to differentiate which part of the hyperbola the data lies on.

The covariance matrix for conic data is defined by

typedef struct conic_stat   /* covariance matrix etc for conic */
{
    Ts_id ts_id;                /* Tina structure identifier */
    int filler;
    double x[5];
    double d[5];
    double u[5][5];
} Conic_stat;

The location of a conic section in 3D is made explicit using the following structure:

typedef struct conic3
{
    Ts_id ts_id;                /* Tina structure identifier */
    int type;
    struct conic *conic;     /* describes the conic in the plane */
    struct vec3 origin;      /* origin point on plane */
    struct vec3 ex, ey, ez;  /* define x, y and z axes: ez = normal */
} Conic3;

The coordinate frame in which conic lies is at origin and has axis ex, ey, and ez. Wh re the 2D conic lies in the xy plane.

Conic  *conic_alloc(unsigned int type)

Conic3 *conic3_alloc(unsigned int type)

Conic  *conic_make(int type, Vec2 center, double theta, double alpha,
                   double beta, double t1, double t2, int branch)

Conic3 *conic3_make(Conic * con2, Vec3 o, Vec3 ex, Vec3 ey, Vec3 ez)

Conic  *conic_copy(Conic * conic)

Conic3 *conic3_copy(Conic3 * con3)

void    conic_free(Conic * conic)

void    conic3_free(Conic3 *con3)

void    conic_format(Conic *conic)

void    conic3_format(Conic3 *conic)

void   *conic_prop_get(Conic * conic, int type, int prop)

Obvious functions for manipulating conic geometry. Note how the naming function differs from that of other geometry to reflect the fact that as well as representing 2D geometry the Conic data structure is also part of the r presentation of the
Conic3.

The functions conic_copy, conic3_copy, conic_free and conic3_free copy and free the property list see proplist description for details). The functions conic_format and conic3_format produces a standard formatted output of conic geometry using the standard Tina format facility. Usually directed to the top level text display window.

Conic  *conic_5pt(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, Vec2 p5)

Conic  *conic_circ_3pt(Vec2 p1, Vec2 p2, Vec2 p3)

Conic  *conic_ellipse_5pt(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, Vec2 p5,
                          double min_aratio)

Conic  *conic_ellipse_3pt(Vec2 p1, Vec2 v1, Vec2 p2, Vec2 v2, Vec2 p3,
                          double min_aratio)

Conic  *conic_circ_3pt(Vec2 p1, Vec2 p2, Vec2 p3)

Functions for generating conics. Prefixes conic_, conic_ellipse_ and conic_circ_ fit totally general conics, ellipses only and circles only respectively. The min_aratio argument of conic_ellipse_ fun tions determines the ellipse aspect ratio below which an ellipse fit
is replaced with a circle fit as is the case if the fit results in a hyperbola).

conic_ and conic_ellipse_ functions can take either 5 points as arguments or 2 points with tangent unit direction vectors and an additional point.

void    conic_set_ends(Conic * conic, Vec2 p1, Vec2 p2, Vec2 pmid)

Vec2    conic_point(Conic * conic, double t)

Vec3    conic3_point(Conic3 * con3, double t)

double  conic_param(Conic * conic, Vec2 p)

double  conic3_param(Conic3 * con3, Vec3 p3)

Functions for relating position vectors and conic parameter values.

conic_set_ends sets conic end point parameter values t1 and t2. respectively. The mid point pmid is used to identify the order of & p1 and p2 along the conic.

Other functions convert between parameter and point values.

void    conic3_negate(Conic3 * con3)

Conic3 *conic3_negative(Conic3 * con3)

Conic  *conic_proj(Conic * conic, Mat3 proj)

void    conic3_transform(Conic3 * conic, Transform3 trans)

Bool    conic3_coincident(Conic3 * c1, Conic3 * c2,
                          double doterror, double poserror)

Bool    conic3_overlap(Conic3 * c1, Conic3 * c2, float *t1, float *t2)

Transformation functions for conic geometry. The negate functions change direction of the normal of a 3D conic the 3D locations of the end points are unchanged.

conic_proj performs a projecti e transformation of the geometry in conic according to the 3X3 projection matrix proj_mat and return a pointer to the transformed version.

conic3_transform applies the rotation and translation trans directly to the conic geomet y structure.

conic3_coincident checks if c1 and c2 are spatially coincident within the allowed position and rotation errors poserror and roterror respectively.


next up previous contents
Next: Plane Geometry Up: Geometrical Primitives Previous: Line Geometry   Contents
root 2017-09-25