可见面消隐参考代码

上传人:豆浆 文档编号:8120820 上传时间:2017-09-26 格式:DOC 页数:3 大小:33.50KB
返回 下载 相关 举报
可见面消隐参考代码_第1页
第1页 / 共3页
可见面消隐参考代码_第2页
第2页 / 共3页
可见面消隐参考代码_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《可见面消隐参考代码》由会员分享,可在线阅读,更多相关《可见面消隐参考代码(3页珍藏版)》请在金锄头文库上搜索。

1、double O1,O2,O3;/视点球坐标分量double Nx,Ny,Nz;/法向量分量double Sx,Sy,Sz;/视向量分量NormalVector(int p1, int p2, int p3)/表面法矢量double Fx,Fy,Fz,Hx,Hy,Hz;/求第一条边的分量Fx=Pp21-Pp11;Fy=Pp22-Pp12;Fz=Pp23-Pp13;/求第二条边的分量Hx=Pp31-Pp11;Hy=Pp32-Pp12;Hz=Pp33-Pp13;/法矢量为第一和第二个矢量的叉积Nx=Fy*Hz-Fz*Hy;Ny=Fz*Hx-Fx*Hz;Nz=Fx*Hy-Fy*Hx;VisualVe

2、ctor(int pt)/视矢量O1=R*k5;O2=R*k6;O3=R*k4;/观察坐标系的视点球坐标Sx=O1-Ppt1;Sy=O2-Ppt2;Sz=O3-Ppt3;/视矢量Product(double v1, double v2, double v3, double n1, double n2, double n3)/矢量的数量积double NProduct;NProduct=v1*n1+v2*n2+v3*n3;return(NProduct);DrawCube()int P1,P2,P3;/面的顶点for(int face=1;face=0)/判断数量积正负 DrawLine(fac

3、e);/数量积大于零,表面可见,实线画出OnDrawCubeXy() /消隐的条件下AfxGetMainWnd()-SetWindowText(案例:立方体动态隐线(消隐后));flag=true;GetMaxX();GetMaxY();InitParameter();ReadPoint();ReadFace();RedrawWindow();补充:#define ROUND(a) int(a+0.5)/四舍五入#define PI 3.1415926/PI 的宏定义#include math.h/数学头文件double R,Theta,Phi;/视点在用户坐标系的球坐标double k9;/

4、运算常量/在视图类的构造函数中初始化变量R=800.0;Theta=-20;Phi=40;flag=false;InitParameter()/透视投影参数初始化k1=sin(PI*Theta/180);k2=sin(PI*Phi/180);k3=cos(PI*Theta/180);k4=cos(PI*Phi/180);k5=k3*k2;k6=k1*k2;k7=k3*k4;k8=k1*k4;Project(double x, double y, double z,double D)/ CPoint 类型 CPoint mypt;double x0,y0,z0;/观察坐标系三维坐标x0=k1*x

5、-k3*y;y0=-k7*x-k8*y+k2*z;z0=-k5*x-k6*y-k4*z+R;mypt.x=D*x0/z0;mypt.y=D*y0/z0;/屏幕坐标系二维坐标/ 视距 D=1000;return mypt;OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) /键盘控制函数 switch(nChar)case VK_UP:Phi=Phi-10;break;/小键盘上向上方向键case VK_DOWN:Phi=Phi+10;break;/小键盘上向下方向键case VK_LEFT:Theta=Theta+10;break;/小键盘上向左方

6、向键case VK_RIGHT:Theta=Theta-10;break;/小键盘上向右方向键default:break;InitParameter();/更新透视参数DrawCube();RedrawWindow();CView:OnKeyDown(nChar, nRepCnt, nFlags);OnRButtonDown(UINT nFlags, CPoint point) /鼠标右键函数 R=R-100;RedrawWindow();CView:OnRButtonDown(nFlags, point);OnLButtonDown(UINT nFlags, CPoint point) /鼠标左键函数 R=R+100;RedrawWindow();CView:OnLButtonDown(nFlags, point);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号