正文

点到一空间直线的垂足【程序实现】2007-04-25 16:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/super/25246.html

分享到:

考试程序:

                   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;

阅读(5505) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册