考试程序:
case 9: //"检验空间点到一空间直线的垂足"
{
float xo,yo,zo;
float x0,y0,z0,xp,yp,zp,xv,yv,zv;
float xl,yl,zl,al,bl,cl;
float xz1,yz1,zz1,xz2,yz2,zz2;
float dxz1,dyz1,dzz1,dxz2,dyz2,dzz2;
float Xp0p,Yp0p,Zp0p;
float Xp0pl,Yp0pl,Zp0pl;
float tmatrix[4][4];
float d;
int k;
float Box[8][3];
int i;
show_int("检验空间点到一空间直线的垂足 ",code);
xo=0., yo=0., zo=0.; //原点平移
x0=0., y0=0., z0=1.; //P0
xp=1., yp=1., zp=0.; //P
xl=1., yl=1., zl=1.; //Pl
//第2个测试数据
// x0=0., y0=0., z0=0.; //P0
// xp=0.5, yp=1., zp=0.; //P
// xl=1., yl=1., zl=1.; //Pl
x0=xo+x0, y0=yo+y0, z0=zo+z0; //P0
xp=xo+xp, yp=yo+yp, zp=zo+zp; //P
xl=xo+xl, yl=yo+yl, zl=zo+zl; //Pl
Xp0p=xp-x0; Yp0p=yp-y0; Zp0p=zp-z0;
Xp0pl=xl-x0; Yp0pl=yl-y0; Zp0pl=zl-z0;
d= sqrt (Xp0pl*Xp0pl+Yp0pl*Yp0pl+Zp0pl*Zp0pl);
al=Xp0pl/d; bl=Yp0pl/d; cl=Zp0pl/d;
dxz1=Yp0p*cl-Zp0p*bl, dyz1=Zp0p*al-Xp0p*cl, dzz1=Xp0p*bl-Yp0p*al;
dxz2=dyz1*cl-dzz1*bl, dyz2=dzz1*al-dxz1*cl, dzz2=dxz1*bl-dyz1*al;
xv=dxz2+xp, yv=dyz2+yp, zv=dyz2+yp; //Pv
xz1=dxz1+x0, yz1=dyz1+y0, zz1=dzz1+z0; //Z1
xz2=dxz2+x0, yz2=dyz2+y0, zz2=dzz2+z0; //z2
show_real("xz1 ",xz1);
show_real("yz1 ",yz1);
show_real("zz1 ",zz1);
show_real("xz2 ",xz2);
show_real("yz2 ",yz2);
show_real("zz2 ",zz2);
/******************************
ita: 1: axonometric
iso:1 --- isometric projection 正等侧
2 --- dimetric ,, 正二侧
3 --- oblique dimetric projection 斜二侧
4 --- Arbitrary axonometry projectio
*******************************/
project_matrix(1,2,1.0,2.0,3.0,4.0,5.0,6.0,tmatrix);
trans3d(&x0,&y0,&z0,tmatrix);
trans3d(&xp,&yp,&zp,tmatrix);
trans3d(&xl,&yl,&zl,tmatrix);
trans3d(&xv,&yv,&zv,tmatrix);
trans3d(&xz1,&yz1,&zz1,tmatrix);
trans3d(&xz2,&yz2,&zz2,tmatrix);
Set_width(0.03);
Set_color(1);
Draw_line(x0,y0,xl,yl);
Draw_text("L");
Set_color(2);
Draw_line(x0,y0,xp,yp);
Draw_text("P");
Set_color(3);
Draw_line(xp,yp,xv,yv);
Draw_text("V");
Set_color(4);
Draw_line(x0,y0,xz1,yz1);
Draw_text("Z1");
Set_color(5);
Draw_line(x0,y0,xz2,yz2);
Draw_text("Z2");
//********************************绘制Box
Box[0][0]=0.0, Box[0][1]=1.0, Box[0][2]=0.0;
Box[1][0]=0.0, Box[1][1]=1.0, Box[1][2]=1.0;
Box[2][0]=1.0, Box[2][1]=1.0, Box[2][2]=1.0;
Box[3][0]=1.0, Box[3][1]=1.0, Box[3][2]=0.0;
Box[4][0]=0.0, Box[4][1]=0.0, Box[4][2]=1.0;
Box[5][0]=1.0, Box[5][1]=0.0, Box[5][2]=1.0;
Box[6][0]=1.0, Box[6][1]=0.0, Box[6][2]=0.0;
Box[7][0]=0.0, Box[7][1]=0.0, Box[7][2]=0.0;
trans3d(&xz2,&yz2,&zz2,tmatrix);
for (i=0; i<8; i++) {
float xx,yy,zz;
xx=Box[i][0], yy=Box[i][1], zz=Box[i][2];
// trans3d (Box[i][0],Box[i][1],Box[i][2],tmatrix);
trans3d (&xx,&yy,&zz,tmatrix);
Box[i][0]=xx, Box[i][1]=yy, Box[i][2]=zz;
}
Set_width(0.3);
Set_color(7);
Moveto(Box[0][0],Box[0][1]); //0
Drawto(Box[1][0],Box[1][1]); //0-1
Drawto(Box[2][0],Box[2][1]); //1-2
Drawto(Box[3][0],Box[3][1]); //2-3
Drawto(Box[0][0],Box[0][1]); //3-0
Drawto(Box[7][0],Box[7][1]); //0-7
Drawto(Box[4][0],Box[4][1]); //7-4
Drawto(Box[5][0],Box[5][1]); //4-5
Drawto(Box[6][0],Box[6][1]); //5-6
Drawto(Box[7][0],Box[7][1]); //6-7
Draw_line(Box[1][0],Box[1][1],Box[4][0],Box[4][1]); //1-4
Draw_line(Box[2][0],Box[2][1],Box[5][0],Box[5][1]); //2-5
Draw_line(Box[3][0],Box[3][1],Box[6][0],Box[6][1]); //3-6
//********************************
}
break;
评论