因为我自己也没太能理解,所以在此就只写一些些。这么多分类,看着就头疼。
准备(齐次坐标系/图形)
新建BaseClass类(.h .cpp),添加必要的参数和函数。
typedef double array2d[5][5];
typedef double array[24];
class CBaseClass
{
public:int theta_y, phi_x, xx, yy, nn, n;
array X, Y, Z, C, XT, YT, ZT, XP, YP, ZP, CP;
array2d A, Ah, Aw;
double ax[9], ay[9], az[9];
double bx[9], by[9], bz[9];
public:
CBaseClass();
virtual ~CBaseClass();
void ReadWorkpiece();void Calculate(array2d B);
void MCalculate(array2d B);
void XCalculate(array2d B);
void Drawtext();
void Display();
void Draw();
void Drawve();
void Drawvt();
void Drawse();
void Drawst();
void DrawViewV(CDC* pdc, CRect rr);
void DrawViewH(CDC* pdc, CRect rr);
void DrawViewW(CDC* pdc, CRect rr);
void moveto(double x, double y, CDC* pdc);
void lineto(double x, double y, CDC* pdc);
void cleanMatrice(array2d B);
};
(一些基本函数上一篇给过了,就不再赘述了。另一些辅助函数,用到时再说。)
1、齐次坐标系
线代的话,高中水平就够了。齐次坐标系的使用,是为了让平移运算可以和旋转、缩放等运算一起处理。这里不再赘述基本变换。
2、图形
void CBaseClass::ReadWorkpiece()
{
X[1] = 0; Y[1] = 0; Z[1] = 0; C[1] = 1;
X[2] = 45; Y[2] = 0; Z[2] = 0; C[2] = 1;
X[3] = 45; Y[3] = 37; Z[3] = 0; C[3] = 1;
X[4] = 0; Y[4] = 37; Z[4] = 0;