typedef struct Point3D { double x,y,z; } P3D; typedef struct Point2D { double x,y; } P2D;
//傳回Q在視平面的投影點座標P在視平面座標系的座標(vx,vy) //視平面的中心點為C,法向量為N(cos(rad),sin(rad),0),原點O,y軸單位向量e2(0,0,-1),x軸單位向量e1為e2 X (-N) =(-sin(rad),cos(rad),0) //ux為視平面x軸方向二相鄰點的距離,rx為C到y軸的水平點數 //uy為視平面y軸方向二相鄰點的距離,ry為C到x軸的垂直點數 // O+rx*ux*e1+ry*uy*e2=C // P=t*N+Q t為P和Q的距 void QinView(P3D Q,P3D C,int rx,int ry,double ux,double uy,P3D N,double rad,P2D *v,double dist) { double t=(C.x-Q.x)*N.x+(C.y-Q.y)*N.y+(C.z-Q.z)*N.z; P3D P; P2D vP; P.x=Q.x+t*N.x; P.y=Q.y+t*N.y; P.z=Q.z+t*N.z; vP.x=rx+(t*sin(rad)+Q.y-C.y)/(ux*cos(rad)); vP.y=ry-(Q.z-C.z)/uy; v->x=vP.x; v->y=vP.y; dist=t; }




|