透视图
透视图三维投影代码如下:
void CTestView::Project(int x,int y,int z)//透视变换
{
double x0,y0,z0;//观察坐标系三维坐标
x0=k[1]*x-k[3]*y;
y0=-k[7]*x-k[8]*y+k[2]*z;
z0=-k[5]*x-k[6]*y-k[4]*z+R;
x2d=D*x0/z0;y2d=D*y0/z0;//屏幕坐标系二维坐标
}
void CTestView::InitParameter()//初始化参数
{
k[1]=sin(PI*Theta/180);
k[2]=sin(PI*Phi/180);
k[3]=cos(PI*Theta/180);
k[4]=cos(PI*Phi/180);
k[5]=k[3]*k[2];
k[6]=k[1]*k[2];
k[7]=k[3]*k[4];
k[8]=k[1]*k[4];
}
x0=sinθ* x- cosφ* y= BC;
y0=-cosφ* cosθ* x- y* cosφ* sinθ+ z* sinφ= -BY1-MN+ z* sinφ= -MY2+ Y3Y4;
z0=-x* cosθ* sinφ– y* sinθ* sinφ–z* cosφ+ R= -OY1-Y1Y2-OY3+R;
其实是相当于求点P在视线坐标系下的三维投影值(x0,y0,z0),然后将其对应地投影到屏幕坐标系上,其中, 视点是球面坐标系,原点O到视点的距离为R.,视线与Z轴夹角为φ,视线在XY平面上的投影与X轴的夹角为θ.
如图:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
其实在研究这个三维投影问题时,我差点就不想再想了,或者干脆问一下别人得了,后来我发现这样并不好,我一定要把它个问题搞懂,这样我的收获才更大,才能研究得更深入,否则我只得到了无数的问题,而没有把它们解决,这是非常不好的,即使你学的再多,再广也没有用,因为你没有深入到一个方向,我要的是深度,是解决问题.
透视图
透视图三维投影代码如下:
void CTestView::Project(int x,int y,int z)//透视变换
{
double x0,y0,z0;//观察坐标系三维坐标
x0=k[1]*x-k[3]*y;
y0=-k[7]*x-k[8]*y+k[2]*z;
z0=-k[5]*x-k[6]*y-k[4]*z+R;
x2d=D*x0/z0;y2d=D*y0/z0;//屏幕坐标系二维坐标
}
void CTestView::InitParameter()//初始化参数
{
k[1]=sin(PI*Theta/180);
k[2]=sin(PI*Phi/180);
k[3]=cos(PI*Theta/180);
k[4]=cos(PI*Phi/180);
k[5]=k[3]*k[2];
k[6]=k[1]*k[2];
k[7]=k[3]*k[4];
k[8]=k[1]*k[4];
}
x0=sinθ* x- cosφ* y= BC;
y0=-cosφ* cosθ* x- y* cosφ* sinθ+ z* sinφ= -BY1-MN+ z* sinφ= -MY2+ Y3Y4;
z0=-x* cosθ* sinφ– y* sinθ* sinφ–z* cosφ+ R= -OY1-Y1Y2-OY3+R;
其实是相当于求点P在视线坐标系下的三维投影值(x0,y0,z0),然后将其对应地投影到屏幕坐标系上,其中, 视点是球面坐标系,原点O到视点的距离为R.,视线与Z轴夹角为φ,视线在XY平面上的投影与X轴的夹角为θ.
如图:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
其实在研究这个三维投影问题时,我差点就不想再想了,或者干脆问一下别人得了,后来我发现这样并不好,我一定要把它个问题搞懂,这样我的收获才更大,才能研究得更深入,否则我只得到了无数的问题,而没有把它们解决,这是非常不好的,即使你学的再多,再广也没有用,因为你没有深入到一个方向,我要的是深度,是解决问题.