计算机图形学投影变换.docx
- 文档编号:28685592
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:249.63KB
计算机图形学投影变换.docx
《计算机图形学投影变换.docx》由会员分享,可在线阅读,更多相关《计算机图形学投影变换.docx(9页珍藏版)》请在冰豆网上搜索。
计算机图形学投影变换
计算机图形学投影变换
部门:
xxx
时间:
xxx
整理范文,仅供参考,可下载自行编辑
计算机图形学实验报告
实验三三维图形的投影变换
学生姓名
专业、班级
指导教师
成绩
电子与信息工程系
2018年11月6日
1、实验目的:
绘制三维物体的轴测投影图和一点透视图,在程序中给定控制多面体的顶点坐标及点线信息。
视点固定在z轴某点上,输入物体的旋转角度及平移量。
正轴测投影图和一点透视图。
b5E2RGbCAP
二、题目:
三维图象的基本变换
三、设计思想:
因为电脑显示的是2维持坐标图象,所以在设计时要将三维的图象坐标转换成电脑能显示的二维持坐标图,然后根据图象的基本变换矩阵计算出变换后的坐标点,最后绘制出图象变换效果。
p1EanqFDPw
四、原程序:
CPointdian22[8]。
//六面体的8个2维坐标点
CPointdian[8]。
floatcoordinate2[8][3]。
floatcoordinate3[8][3]六面体的8个3维坐标点
Voiddraw6angle(>//绘制一个六面方体。
dc.MoveTo(0,0>。
//yuandianzuobiaodian(400,400>
dc.LineTo(400,0>。
//x//绘制一x轴,Y,Z轴
dc.MoveTo(0,0>。
dc.LineTo(0,400>。
//y
dc.MoveTo(50,50>。
//z
dc.LineTo(-200,-200>。
dc.MoveTo(dian[0]>。
//0-1
dc.LineTo(dian[1]>。
dc.MoveTo(dian[0]>。
//0-3
dc.LineTo(dian[3]>。
dc.MoveTo(dian[0]>。
//0-7
dc.LineTo(dian[7]>。
dc.MoveTo(dian[4]>。
//4-3
dc.LineTo(dian[3]>。
dc.MoveTo(dian[4]>。
//4-5
dc.LineTo(dian[5]>。
dc.MoveTo(dian[4]>。
//4-7
dc.LineTo(dian[7]>。
dc.MoveTo(dian[6]>。
//6-5
dc.LineTo(dian[5]>。
dc.MoveTo(dian[6]>。
//6-7
dc.LineTo(dian[7]>。
dc.MoveTo(dian[6]>。
//6-1
dc.LineTo(dian[1]>。
dc.MoveTo(dian[2]>。
//2-1
dc.LineTo(dian[1]>。
dc.MoveTo(dian[2]>。
//2-3
dc.LineTo(dian[3]>。
dc.MoveTo(dian[2]>。
//2-5
dc.LineTo(dian[5]>}
}
voidCCBod_3DView:
:
switch_point(>//将三维坐标点转换成电脑上能表示的二维坐标点DXDiTa9E3d
{floatcanshu=0.7071。
for(inti=0。
i<8。
i++>
{dian[i].x=float(coordinate3[i][0]+float((-coordinate3[i][2]*canshu>>>。
RTCrpUDGiT
dian[i].y=float(coordinate3[i][1]+float((-coordinate3[i][2]*canshu>>>。
5PCzVD7HxA
}}
voidCCBod_3DView:
:
OnMoveOnz(>//图象在Z轴上的移动。
{
//TODO:
Addyourcommandhandlercodehere
for(inti=0。
i<8。
i++>
{
coordinate3[i][2]=coordinate3[i][2]+50。
}
this->Invalidate(>。
}
voidCCBod_3DView:
:
OnSpinz(>//Z轴上旋转
{//TODO:
Addyourcommandhandlercodehere
floatb=cos(0.23>。
floata=sin(0.23>。
for(inti=0。
i<8。
i++>
{coordinate3[i][0]=float(coordinate3[i][0]*b>+float(coordinate3[i][1]*(-a>>。
jLBHrnAILg
coordinate3[i][1]=float(coordinate3[i][0]*a>+coordinate3[i][1]*b。
xHAQX74J0X
}
OnLarge(>。
this->Invalidate(>。
}
voidCCBod_3DView:
:
OnDUICHeng(>//关于X对称
{//TODO:
Addyourcommandhandlercodehere
for(inti=0。
i<8。
i++>
{coordinate3[i][2]=-coordinate3[i][2]。
}
this->Invalidate(>。
}
voidCCBod_3DView:
:
OnZhengzhouce(>//轴测投影图
{//TODO:
Addyourcommandhandlercodehere
if(flage==false>
{
flage=true。
}
else
{flage=false。
}
floatdian3[8][3]。
for(inti=0。
i<8。
i++>
{
dian3[i][0]=coordinate3[i][0]。
dian3[i][1]=coordinate3[i][1]。
dian3[i][2]=coordinate3[i][2]。
}
floata,b,c。
floatangle_a=3.1415/4。
floatangle_b=3.1415/6。
for(intj=0。
j<8。
j++>
{
a=dian3[j][0]。
b=dian3[j][1]。
c=dian3[j][2]。
dian3[j][0]=float(a*cos(angle_a>-b*sin(angle_a>>。
LDAYtRyKfE
dian3[j][1]=0。
dian3[j][2]=float(-sin(angle_b>*(a*sin(angle_a>+b*cos(angle_a>>+c*cos(angle_b>>。
}Zzz6ZB2Ltk
floatcanshu=0.7071。
for(inti2=0。
i2<8。
i2++>
{dian22[i2].x=float(dian3[i2][0]+float((-dian3[i2][2]*canshu>>>。
dvzfvkwMI1
dian22[i2].y=float(dian3[i2][1]+float((-dian3[i2][2]*canshu>>>。
rqyn14ZNXI
}
this->Invalidate(>。
}
voidCCBod_3DView:
:
OnONEView(>//一点透视图象
{
//TODO:
Addyourcommandhandlercodeher
this->Invalidate(>。
if(m_toushi==false>
{m_toushi=true。
}else
{m_toushi=false。
}
}
五、运行结果:
1.初始化界面。
2.沿Z轴旋转的效果
3放大效果
4旋转效果
5对称
6.轴侧投影图
7.一点透视
申明:
所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 投影变换
![提示](https://static.bdocx.com/images/bang_tan.gif)