已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告实验名称 绘制简单的三维图形 评分 实验日期 年 月 日 指导教师 姓名 专业班级 学号 一、实验目的1、复习用二维图来表示三维立体图形,三视图的表示及的三视图的变换矩阵2、掌握用C语言编程实现三维简单立体的正等测投影的绘制3、掌握用C语言编程实现三维简单立体的三视图的绘制4、掌握用C语言编程实现三维简单立体的透视图的绘制5、用C语言编写的图形变换函数二、实验要求1、在屏幕上绘制出一个长方体或简单几何体的正等测投影的几何图形,要求在图形下方标出是正等侧、还是正二侧投影图形。2、在屏幕上绘制出一个长方体或简单几何体的三视图投影图形,要求在图形下方标出是什么投影图形。3、在屏幕上绘制出一个长方体或简单几何体的透视投影图形。三、 关键算法及实现原理1、二维屏幕表示三维立体图的关键:屏幕是一个二维的平面空间,要在它上做出三维的图形,就必须把三维的空间图形通过一个投影变换变为二维的图形,即投影变换把三维坐标点(x,y,z)变为(x,0,z)。2、 投影变换的类型3、按下述步骤编写绘制三维图形的函数 在草稿纸上给出草图,并确定各顶点的序号和相应的顶点坐标值,建立顶点表和连边表。 在程序中定义三个数组,用于存放顶点的(x,y,z)的坐标值。 实施对立方体进行相应的投影变换,即对顶点矩阵与变换矩阵相乘,得到一个新的顶点矩阵。 用新顶点表的坐标值,注意些时只有x坐标和z坐标,y坐标已在投影中消掉,按边表的连线规则,用line函数在顶点之间两两连线。4、将每一个几何变换编写成一个函数,在主程序中进行坐标变换时,直接调用相应的函数即可;变换后调用绘图函数用不同颜色在屏幕上绘出变换后的图形。四、程序调试中的问题五、程序运行结果或数据#include#include#include#includedouble xmax=639.0, ymax=399.0;double f44,xx,yy,zz,dd;int scx(double xj) int x; x=(int)(-xj+xmax/2); return(x);int scy(double yj) int y; y=ymax-(int)(yj+ymax/2); return(y);void tv() f00=1.0;f01=0.0;f02=0.0;f03=0.0; f10=0.0;f11=0.0;f12=0.0;f13=0.0; f20=0.0;f21=0.0; f22=1.0;f23=0.0; f30=0.0;f31=0.0; f32=1.0;f33=1.0;void th( int n) f00=1.0;f01=0.0;f02=0.0;f03=0.0; f10=0.0;f11=0.0;f12=-1.0;f13=0.0; f20=0.0;f21=0.0; f22=0.0;f23=0.0; f30=0.0;f31=0.0; f32=-n;f33=1.0;void tw( int d) f00=0.0;f01=0.0;f02=0.0;f03=0.0; f10=-1.0;f11=0.0;f12=0.0;f13=0.0; f20=0.0;f21=0.0; f22=1.0;f23=0.0; f30=-d;f31=0.0; f32=0.0;f33=1.0;void teq() f00=0.707;f01=0.0;f02=-0.408;f03=0.0; f10=-0.707;f11=0.0;f12=-0.408;f13=0.0; f20=0.0;f21=0.0; f22=0.816;f23=0.0; f30=0.0;f31=0.0; f32=0.0;f33=1.0;void tt1yq(double l,double n,double m,double q) f00=1.0;f01=0.0;f02=0.0;f03=0.0; f10=0.0;f11=0.0;f12=0.0;f13=q; f20=0.0;f21=0.0; f22=1.0;f23=0.0; f30=l;f31=0.0; f32=n;f33=m*q+1;void axis() line(scx(0.0),scy(ymax/2),scx(0),scy(0.0); line(scx(0),scy(0),scx(xmax/2),scy(-ymax/2)-19); line(scx(0),scy(0),scx(-xmax/2),scy(-ymax/2)-19); outtextxy(scx(0),ymax/2+10,O); outtextxy(scx(-xmax/2+10),scy(-ymax/2)-10,Y); outtextxy(scx(xmax/2),scy(-ymax/2)-10,X); outtextxy(scx(0)+3,scy(ymax/2)+6,Z);double affine3x(double x,double y,double z,double d) xx=x*f00+y*f10+z*f20+d*f30; return(xx);double affine3y(double x,double y,double z,double d) yy=x*f01+y*f11+z*f21+d*f31; return(yy);double affine3z(double x,double y,double z,double d) zz=x*f02+y*f12+z*f22+d*f32; return(zz);double affine3d(double x,double y,double z,double d) dd=x*f03+y*f13+z*f23+d*f33; return(dd);void draw(x1,z1)double x18,z18; line(scx(x10),scy(z10),scx(x11),scy(z11); line(scx(x10),scy(z10),scx(x13),scy(z13); line(scx(x11),scy(z11),scx(x12),scy(z12); line(scx(x12),scy(z12),scx(x13),scy(z13); line(scx(x12),scy(z12),scx(x11),scy(z11); line(scx(x13),scy(z13),scx(x14),scy(z14); line(scx(x12),scy(z12),scx(x17),scy(z17); line(scx(x11),scy(z11),scx(x16),scy(z16); line(scx(x14),scy(z14),scx(x17),scy(z17); line(scx(x14),scy(z14),scx(x15),scy(z15); line(scx(x16),scy(z16),scx(x17),scy(z17); line(scx(x16),scy(z16),scx(x15),scy(z15); line(scx(x15),scy(z15),scx(x10),scy(z10);void main()int drive=DETECT,mode; static double x0=60.0,0.0,0.0,175.0,175.0,60.0,0.0,0.0; static double y0=75.0,75.0,75.0,75.0,0.0,0.0,0.0,0.0; static double z0=125.0,125.0,0.0,0.0,0.0,125.0,125.0,0.0; static double x18,y18,z18,dd8; static double x28,y28,z28; static double x38,y38,z38; int i; double x,xx,yy,zz,zt; initgraph(&drive,&mode,c:tc3bgi); axis(); teq(); for(i=0;i=7;i+) x1i=affine3x(x0i,y0i,z0i,1.0); y1i=affine3y(x0i,y0i,z0i,1.0); z1i=affine3z(x0i,y0i,z0i,1.0); setcolor(RED); draw(x1,z1); zt=scy(z10)+10; outtextxy(scx(x10),zt,tequ ); getch(); tw(20); for(i=0;i=7;i+) x1i=affine3x(x0i,y0i,z0i,1.0); y1i=affine3y(x0i,y0i,z0i,1.0); z1i=affine3z(x0i,y0i,z0i,1.0); setcolor(BLUE); draw(x1,z1); zt=scy(z10)+10; outtextxy(scx(x10),zt,tw ); getch(); th(20); for(i=0;i=7;i+) x1i=affine3x(x0i,y0i,z0i,1.0); y1i=affine3y(x0i,y0i,z0i,1.0); z1i=affine3z(x0i,y0i,z0i,1.0); setcolor(BLUE); draw(x1,z1); zt=scy(z10)+10; outtextxy(scx(x10),zt,th ); getch(); tv(); for(i=0;i=7;i+) x1i=affine3x(x0i,y0i,z0i,1.0); y1i=affine3y(x0i,y0i,z0i,1.0); z1i=affine3z(x0i,y0i,z0i,1.0); setcolor(BLUE); draw(x1,z1); zt=scy(z10)+10; outtextxy(scx(x10),zt,tv ); getch();tt1yq(10.0,-20.0,-30.0,-0.005); for(i=0;i=7;i+) x1i=affine3x(x0i,y0i,z0i,1.0); y1i=affine3y(x0i,y0i,z0i,1.0); z1i=affine3z(x0i,y0i,z0i,1.0); d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运城学院《数理经济学》2025-2026学年期末试卷
- 景德镇学院《产业经济学》2025-2026学年期末试卷
- 阳光学院《民法学》2025-2026学年期末试卷
- 滁州职业技术学院《内部控制与风险管理》2025-2026学年期末试卷
- 中国矿业大学《中国历史文选》2025-2026学年期末试卷
- 锁穿健康护理方案
- 健康宣教:高血脂预防卡片
- 棘皮类养殖工安全意识强化考核试卷含答案
- 温差电致冷器件制造工诚信评优考核试卷含答案
- 采矿安全监控系统值班员班组评比知识考核试卷含答案
- 新质生产力与低空经济
- 索尼摄像机DCR-SR60E说明书
- 足疗护理课件
- 2025年辅警招聘考试真题含答案详解
- 2025年中国左炔诺孕酮片市场调查研究报告
- 修路工程占地赔偿协议书
- 房屋安全鉴定服务投标方案(技术标)
- 工业废水处理工考核要素细目表与考核内容结构表(征求意见稿)
- 放射科MRI室的设计与施工
- 部队饮食安全
- DB43T 2563-2023 滑坡崩塌泥石流治理工程勘查规范
评论
0/150
提交评论