计算机图形学实验报告2

上传人:aa****6 文档编号:21818480 上传时间:2017-11-24 格式:DOC 页数:17 大小:78KB
返回 下载 相关 举报
计算机图形学实验报告2_第1页
第1页 / 共17页
计算机图形学实验报告2_第2页
第2页 / 共17页
计算机图形学实验报告2_第3页
第3页 / 共17页
计算机图形学实验报告2_第4页
第4页 / 共17页
计算机图形学实验报告2_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《计算机图形学实验报告2》由会员分享,可在线阅读,更多相关《计算机图形学实验报告2(17页珍藏版)》请在金锄头文库上搜索。

1、青 岛 农 业 大 学实 验 报 告实验课程: 学生姓名: 学 号: 专业班级: 2014 年 12 月 28 日2目 录实验二 几何变换实 验 三 二维基本图形生成的算法实现.实验四 二维填充图的生成算法实验五 曲线的生成算法实现3实验二1实验名称: 图形绘制2实验目的:(1) 掌握二维图形基本的几何变换原理及变换矩阵;(2) 掌握矩阵运算的程序设计。3 说明图形设计思想或程序流程图(1) 掌握二维图形的齐次坐标表示方法;(2)实现二维图形的基本变换,如进行平移变换等。算法描述:二维图形齐次坐标变换矩阵一般表达式: ihgfedcbaT这 33 矩阵中各元素功能一共可分成四块,即体 放 大

2、。则 总 体 缩 小 ; 否 则 , 总若 变 换 。: 对 整 体 图 形 进 行 伸 缩处 产 生 一 个 灭 点 。: 在 处 产 生 一 个 灭 点 。: 在: 对 图 形 做 投 影 变 换 。 。: 对 图 形 进 行 平 移 变 换 。转 、 对 称 、 错 切 等 变 换: 对 图 形 进 行 缩 放 、 旋,101*1i iyxyxihxghfcebda(4)程序结果分析#include #include double x1,y1,x2,y2,x3,y3,x4,y4;4void pingyi(double d,double c) double a1,b1,a2,b2;a1=x

3、1+d;b1=y1+c;a2=x2+d;b2=y2+c;rectangle(a1,b1,a2,b2);void suofang(double s)double a1,b1,a2,b2;a1=(double)x1*s;b1=(double)y1*s;a2=(double)x2*s;b2=(double)y2*s;rectangle(a1,b1,a2,b2);void xuanzhuan(double b)double a1,b1,a2,b2;a1=x1*cos(b)-y1*sin(b);b1=y1*cos(b)+x1*sin(b);a2=x2*cos(b)-y2*sin(b);b2=y2*cos

4、(b)+x2*sin(b);rectangle(a1,b1,a2,b2);void cuoqie(double b,double d)5double a1,b1,a2,b2,a3,b3,a4,b4;a1=x1+b*y1; a3=x3+b*y3;b1=d*x1+y1; b3=d*x3+y3;a2=x2+b*y2; a4=x4+b*x4;b2=d*x2+y2; b4=d*x4+y4;line(a1,b1,a3,b3);line(a3,b3,a2,b2);line(a2,b2,a4,b4);line(a4,b4,a1,b1);void duichenpoint()double a1,b1,a2,b2

5、;a1=-x1;b1=-y1;a2=-x2;b2=-y2;rectangle(a1,b1,a2,b2);void duichenx()double a1,b1,a2,b2;a1=x1;b1=-y1;a2=x2;b2=-y2;rectangle(a1,b1,a2,b2);void duicheny()double a1,b1,a2,b2;a1=-x1;b1=y1;a2=-x2;b2=y2;rectangle(a1,b1,a2,b2);6void duichenxy()double a1,b1,a2,b2;a1=y1;b1=x1;a2=y1;b2=x2;rectangle(a1,b1,a2,b2)

6、;void duichenyx()double a1,b1,a2,b2;a1=-y1;b1=-x1;a2=-y2;b2=-x2;rectangle(a1,b1,a2,b2);main() int gdriver,gmode;int select=100;double c,d,e;gdriver=DETECT;gmode=0;initgraph(&gdriver,&gmode,d:tc20hbgi);x1=50;y1=50;x2=100;y2=100;x3=x2;y3=y1;x4=x1;y4=y2;printf(please input a rectangles two point:(x1,y1

7、,x2,y2);scanf(%lf%lf%lf%lf,&x1,&y1,&x2,&y2);rectangle(x1,y1,x2,y2);getch();printf(1-pingyin);printf(2-suofang);7printf(3-xuanzhuan);printf(4-cuoqie);printf(5-guanyu yuandian duichenn);printf(6-guanyu x duichen n);printf(7-guanyu y duichen n);printf(8-guanyu y=x duichen n);printf(9-guanyu y=-x duiche

8、n n);printf(would you want to select what:(0 is exit system!) n);while(select!=0)scanf(%d,&select);if(select=1)printf(whats distance to pingyi?);printf(x: );scanf(%lf,&d);printf(y: );scanf(%lf,&c);pingyi(d,c);else if(select=2)printf(whats size of rectangle you want?);scanf(%lf,&e);suofang(e);else if

9、(select=3)8printf(xuanzhauns size?);scanf(%lf,&e);xuanzhuan(e);else if(select=4)printf(cuoqies size?);scanf(%lf%lf,&c,&d);cuoqie(c,d);else if(select=5)duichenpoint();else if(select=6)duichenx();else if(select=7)duicheny();else if(select=8)duichenxy();else if(select=9)duichenyx();elseprintf(error ple

10、ase again! or input 0 to exit!n);closegraph();system(pause);输入一个矩形,输入想要进行的操作,得到操作之后的结果。图形转换,错切那个地方的程序有错误,其他的函数接口都写得很好。9实验三1.实验名称 二维基本图形生成的算法实现2.实验目的(1) 掌握直线的两种生成算法;(2)掌握二维图形显示原理。3.说明图形设计思想或程序流程图(1)对各种生成算法进行效率及效果的分析和比较;(2)实现直线的生成;(3)学有余力的同学可在对现有算法理解的基础上,能自行设计二维图形的生成算法并编程实现。算法描述:1. 数值微分法(Digital Diffe

11、rential Analyzer,DDA)生成直线(1) 算法思想:基于直线的微分方程来生成直线。已知过端点 P0 (x0, y0), P1(x1, y1)的直线段 L:y=kx+b直线斜率为 dxyxyk01(2)数学描述k 1 时,在 x 的增量方向上走步,走步的方向决定于 x 的符号。xi+1=xi+ x , 计算 yi+1= kxi+1+ b = kxi + b + kx= yi + kx 当 x =1; yi+1 = yi+ k 即:当 x 每递增 1,y 递增 k(即直线斜率);在这种情况下,x 每增加 1,y 最多增加 1。当 k 1 时,在 y 的增量方向上走步,走步的方向决定

12、于 y 的符号。yi+1 = yi + 1计算 xi = yi/k - b/kxi+1 = yi+1/k - b/k10= (yi+1)/k - b/k= yi/k-b/k + 1/k= xi + 1/k2. Bresenham 算法生成直线(1)算法思想比较从理想直线到位于直线上方的像素的距离 d2 和相邻的位于直线下方的像素的距离 d1,然后根据距离误差项的符号确定与理想直线最近的象素。(2) 数学描述1. 判别函数设直线起点 P0(x0,y0) ,终点 P1(x1,y1) ,令 e0=2y - x 作为判别函数,根据 e0 的正负,可以确定走向: e00,Y 方向不走步 e0=0,Y 方

13、向走一步(2) 递推公式对于第 i +1 步(i=0,l,2,n)如果 ei 0,则 Y 方向走一步:Xil Xi+1 Yi1 =Yi+1 ei1= ei + 2y - 2 x如果 ei0,则 Y 方向不走步:Xil Xi+1 Yi1 =Yiei1= ei+ 2y(4)程序结果分析#include #include double x,y;double a50;b50;void run(double k,int d)int i;11if(abs(k)#include#include#includevoid draw(int x1,int y1,int x2,int y2,int delta)in

14、t nx1,ny1,nx2,ny2;nx1=x1,ny1=y2-delta,nx2=x1+delta,ny2=y2;while(ny1=y1)&(nx2x2)ny2-=nx2-x2; nx2=x2;while(ny1y1)line(nx1,ny1,nx2,ny2);getch();ny1-=delta; ny2-=delta; nx1+=y1-ny1; ny1=y1;while(nx1y1)line(nx1,ny1,nx2,ny2);getch();ny2-=delta; nx1+=delta; int main(void)int x1,y1,y2,x2,delta;int driver=DE

15、TECT,mode;printf(Please input lefttop(x1,y1) and rightbottom(x2,y2) of rectangle and delta:n);scanf(%d%d%d%d%d,&x1,&y1,&x2,&y2,&delta);initgraph (&driver,&mode,d:tc20hbgi); /*这里*/rectangle(x1,y1,x2,y2);getch();draw(x1,y1,x2,y2,delta);gotoxy(1,1);printf(Press any key to exit!);getch();closegraph();return 0;利用活性边表,对图形进行填充,网上有这种算法的模板,稍加修改就可以形成图形,做这个实验的时

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

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

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