curve.h

Go to the documentation of this file.
#ifndef __CURVE_H__
#define __CURVE_H__

#include "path2d.h"

#pragma pack(4)
typedef struct{
 int type;
 double minX, maxX;
 double minY, maxY;
 double x0, y0;
} POINTDATA;

typedef struct{
 int type;
 double minX, maxX;
 double minY, maxY;
 double x0, y0;
 double x1, y1;
 BOOL valid;
} LINEDATA;

typedef struct{
 int type;
 double minX, maxX;
 double minY, maxY;
 double x0, y0;
 double x1, y1;
 double x2, y2;
 BOOL valid;
} QUADDATA;

typedef struct{
 int type;
 double minX, maxX;
 double minY, maxY;
 double x0, y0;
 double x1, y1;
 double x2, y2;
 double x3, y3;
 BOOL valid;
} CUBICDATA;

typedef struct{
 int type;
 double minX, maxX;
 double minY, maxY;
} COMMONDATA;

typedef struct{
 union {
  int type;
  COMMONDATA c;
  POINTDATA pt;
  LINEDATA line;
  QUADDATA quad;
  CUBICDATA cubic;
 } u;
} CURVEDATA;
#pragma pack()
double CurveGetX(CURVEDATA *curve, double t);
double CurveGetY(CURVEDATA *curve, double t);
double CurveGetX0(CURVEDATA *curve);
double CurveGetY0(CURVEDATA *curve);
double CurveGetX1(CURVEDATA *curve);
double CurveGetY1(CURVEDATA *curve);

void InitPointData(CURVEDATA *curve, double x, double y);
void InitLineData(CURVEDATA *curve, double x0, double y0, double x1, double y1);
void InitQuadData(CURVEDATA *curve, double *params);
void InitCubicData(CURVEDATA *curve, double *params);

void SplitCurve(
 CURVEDATA *curve,
 CURVEDATA *curveLeft,
 CURVEDATA *curveRight,
 double t
);
CURVEDATA *ReduceCurve(
 CURVEDATA *curve,
 CURVEDATA *curveDst,
 double tMin,
 double tMax
);

int FindInflectionPoints(CURVEDATA *curve, double *inflections);
int YDirection(CURVEDATA *curve, BOOL yaxis, double y, double t);
int SolveCurve(CURVEDATA *curve, BOOL yaxis, double y, double *r);
BOOL IsHorizontalLine(CURVEDATA * curve);
void DebugOutCurve(CURVEDATA *curve);
BOOL CurvesEqual(CURVEDATA *a, CURVEDATA *b);
double CurveLength(CURVEDATA *curve);
#endif

Generated on Thu Mar 27 01:46:52 2008 for Item Arrays by  doxygen 1.4.6-NO