透视图

透视图三维投影代码如下:

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轴的夹角为θ.

如图:

 

--------------------------------------------------------------------------------

 --------------------------------------------------------------------------------

 

其实在研究这个三维投影问题时,我差点就不想再想了,或者干脆问一下别人得了,后来我发现这样并不好,我一定要把它个问题搞懂,这样我的收获才更大,才能研究得更深入,否则我只得到了无数的问题,而没有把它们解决,这是非常不好的,即使你学的再多,再广也没有用,因为你没有深入到一个方向,我要的是深度,是解决问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值