00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_BEZIER_H__
00020 #define __CS_BEZIER_H__
00021
00024
00027
00028 #define NR2 9
00029 #define NR3 16
00030 #define NR4 25
00031 #define NR5 36
00032 #define NR6 49
00033 #define NR7 64
00034 #define NR8 81
00035 #define NR9 100
00036
00037 #define IND1 0
00038 #define IND2 (IND1+NR1)
00039 #define IND3 (IND2+NR2)
00040 #define IND4 (IND3+NR3)
00041 #define IND5 (IND4+NR4)
00042 #define IND6 (IND5+NR5)
00043 #define IND7 (IND6+NR6)
00044 #define IND8 (IND7+NR7)
00045 #define IND9 (IND8+NR8)
00046 #define IND10 (IND9+NR9)
00047
00048 #define OFFSET_1 (IND1 * 9)
00049 #define OFFSET_2 (IND2 * 9)
00050 #define OFFSET_3 (IND3 * 9)
00051 #define OFFSET_4 (IND4 * 9)
00052 #define OFFSET_5 (IND5 * 9)
00053 #define OFFSET_6 (IND6 * 9)
00054 #define OFFSET_7 (IND7 * 9)
00055 #define OFFSET_8 (IND8 * 9)
00056 #define OFFSET_9 (IND9 * 9)
00057 #define OFFSET_10 (IND10 * 9)
00058
00059 #define LUT_SIZE OFFSET_10 // Doubles
00060
00061 class csVector3;
00062 class csVector2;
00063
00064 class csBezier2
00065 {
00066 private:
00067
00068
00069 static double bincoeff[3];
00070
00071
00072 static double bernsteinMap[LUT_SIZE];
00073 static double bernsteinDuMap[LUT_SIZE];
00074 static double bernsteinDvMap[LUT_SIZE];
00075 static bool initialized;
00076
00077 public:
00078
00080 static void Initialize ();
00081
00083 static double BernsteinAt(double u, int j, double v, int k);
00084
00089 static double BernsteinDuAt(double u, int j, double v, int k);
00090
00095 static double BernsteinDvAt(double u, int j, double v, int k);
00096
00105 static csVector3 GetNormal(double** aControls, int u,
00106 int v, int resolution);
00107
00112 static csVector3 GetNormal(double** aControls, double u, double v);
00113
00119 static csVector3 GetPoint(double** aControls, int u, int v, int resolution,
00120 double *map = NULL);
00121
00127 static csVector2 GetTextureCoord(double** aControls, int u, int v,
00128 int resolution, double *map = NULL);
00129
00134 static csVector3 GetPoint(double** aControls, double u, double v,
00135 double (*func)(double, int, double, int) = NULL );
00136 };
00137
00138 #endif // __CS_BEZIER_H__