#include "math.h" double xmax=639,ymax=479; double f[3][3],xx,yy; /*转换为屏幕坐标*/ int scx(double xj){ int x; x=(int)(xj+xmax/2); return x; } int scy(double yi){ int y; y=ymax-(int)(yi+ymax/2); return y; } /*平移*/ void parallel(double dx,double dy){ f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0; f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0; f[2][0]=dx;f[2][1]=dy;f[2][2]=1; } /*旋转*/ void rotate(double theta){ double th; th=theta/180*3.1415926; f[0][0]=cos(th);f[0][1]=sin(th);f[0][2]=0; f[1][0]=-sin(th);f[1][1]=cos(th);f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*关于X轴对称*/ void taisho_x(){ f[0][0]=1;f[0][1]=0;f[0][2]=0; f[1][0]=0;f[1][1]=-1;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*关于Y轴对称*/ void taisho_y(){ f[0][0]=-1;f[0][1]=0;f[0][2]=0; f[1][0]=0;f[1][1]=1;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*关于原点轴对称*/ void taisho_o(){ f[0][0]=-1;f[0][1]=0;f[0][2]=0; f[1][0]=0;f[1][1]=-1;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*关于X=Y轴对称*/ void taisho_xy(){ f[0][0]=0;f[0][1]=1;f[0][2]=0; f[1][0]=1;f[1][1]=0;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*关于X=-Y轴对称*/ void taisho_fxy(){ f[0][0]=0;f[0][1]=-1;f[0][2]=0; f[1][0]=-1;f[1][1]=0;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*比例*/ void scale(double a,double b){ f[0][0]=a;f[0][1]=0.0;f[0][2]=0.0; f[1][0]=0.0;f[1][1]=b;f[1][2]=0.0; f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0; } /*错切*/ void tuoq(double a, double b){ f[0][0]=1;f[0][1]=b;f[0][2]=0; f[1][0]=a;f[1][1]=1;f[1][2]=0; f[2][0]=0;f[2][1]=0;f[2][2]=1; } /*画坐标轴*/ void axis(){ line(scx(0),scy(-ymax/2),scx(0),scy(ymax/2)); line(scx(-xmax/2),scy(0),scx(xmax/2),scy(0)); } /*矩阵相乘*/ double affinex(double x,double y,double d){ xx=x*f[0][0]+y*f[1][0]+d*f[2][0]; return xx; } double affiney(double x ,double y,double d){ yy=x*f[0][1]+y*f[1][1]+d*f[2][1]; return yy; } |