- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三维图形、曲线及曲面的绘制-Read.doc
三维图形、曲线及曲面的绘制
制作者:贾运蕾
班 级:计算机学院九九级(一)班
)
A.程序要求:将一个三维图形--房子投影到二维平面上,并为追求其真实感,应将它不能
被观察者看到的面隐藏,为追其动态效果,可以使房子以一定方式旋转起来。
B.设计思想:
1.三维坐标系中确定房子各个点的坐标,另外不要忘记给各个点按照一定次序编号,以便
用以确定哪两个点之间有连线,以便于当将三维图形—房子投影到二维平面时更便于重
画;房子共有十个顶点,十七条边线,七个面,给每个面编号并记下位于每个面中的顶
点编号及边线编号,以便于在消隐面时确定哪些面应该去除。
2.建立数据结构:
1)建立点的数据结构:
struct pixel
{ int x;
int y;
int z;
};
2)本程序需要三个piexel类型的数组:
顶点:p[10]; 面:二维数组face[7][];参考点:refer
3.三维坐标系中确定房子各顶点及所选定的某一参考点的坐标值。
4.将三维图形--房子投影到二维平面上。
1)采用透视投影,方法如下:
设顶点的三维坐标分别为:x,y,z;
投影到二维平面后,其二维坐标为xp,yp;
投影平面平行与xy平面,距投影中心(即三维坐标系原点)的距离为d。
则:xp=d*x/z,
yp=d*y/z
另有结论:①幕布远推,物体的投影变大;幕布近推,物体的投影变小。
②d不变,随z变大,物体的投影变小;
d不变,随z变小,物体的投影变大。
2)由于按照公式1)做物体的投影很不方便,所以可以改进,较好的方法是物体不
动,而观察者可以根据自己的需要确定观察位置,再投影取像,即:以观察点为
原点,建立观察坐标系,把用户坐标系下的物体变为观察坐标系下的物体,再投
影成像,称为取景变换。
公式如下:
已知观察点坐标为(a,b,c);
v=sqrt(a*a+b*b), u=sqrt(a*a+b*b+c*c)
-b/v -a*c/(u*v) -a/u 0
a/v -b*c/(u*v) -b/u 0
变换矩阵= 0 v/u -c/u 0
0 0 u 1
通过变换矩阵的运算,已将原坐标系中的点 观察坐标系中的点
有了观察坐标系下的坐标,还不能生成图象,还需要经过一次投影。
利用公式:xp=d*xe/ze, yp=d*ye/ze
三维图形即可以显示到二维平面。
注意:因为所选择的视区只能放下三维图形的一部分,所以应调整比例。
5. 房子面的隐藏:
为追求真实感,在观察者观察房子时应将被遮挡的面隐藏起来。
例如:
d1 c1
a1 b1
c2
a2 b2
长方体a1c2在被从垂直桌面向内方向观察时,就会有三个面—a2b2c2d2,c1d1d2c2
和a1a2d2d1被遮挡。
同理,房子被观察者观察时也存在同一问题,解决方法如下:
n
p4 p3
p1 p2
面s:p1p2p3p4
法线方向 r=p2-p1
q=p3-p2 n=r*q
可见: cos?正,?:0—90度,s可见
cos?负,?:90—180度,s不可见
cos?的求解:
p.n=|p|.|n|.cos?
? p.n=px.nx+py.ny+pz.nz
p n
注意:在判断房子任意一个面的方向向量时,该方向向量都指向房子内部中心。
6.房子的旋转:
由于房子的投影是基于在观察坐标系中完成的,所以房子在旋转时不必改变各顶
点的实际坐标,只要保证参考点的坐标发生变化即可。
房子的旋转有多种方式,如:
参考点可以在一个圆上移动。
参考点可以在一个球上移动。
参考点的选定依鼠标的点击来确定。
C. 源程序。
执行程序。
说明:程序执行后,屏幕为黑屏,选择 键来选择房子的旋转方向,每按
一次键,房子旋转180度,最后按回车键可返回原界面。
曲线的绘制
一.三次参数样条曲线
A. 程序要求:在屏幕上由给定的离散的
文档评论(0)