计算机图形上机作业

计算机图形上机作业

ID:38720052

大小:3.62 MB

页数:24页

时间:2019-06-18

计算机图形上机作业_第1页
计算机图形上机作业_第2页
计算机图形上机作业_第3页
计算机图形上机作业_第4页
计算机图形上机作业_第5页
资源描述:

《计算机图形上机作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算机图形上机作业实验一开发环境的使用及直线的生成实验目的:直线的生成是用计算机生成图形最基本的技能,通过本实验使学生掌握如何用计算机生成直线。熟悉开发环境,生成直线。实验要求:(1)熟悉TurboC开发环境(2)分别用DDA算法、Bresenham算法生成直线实验原理:一、直线的DDA算法设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得:(1)设第i个坐标点为,可通过计算由x方向的增量△x引起y的改变来生成直线,当x方向的步进值为1时,则,选取最接近的像素点作为直线的下一个坐标。(2

2、)也可通过计算由y方向的增量△y引起x的改变来生成直线当y方向的步进值为1时,则,选取最接近的坐标点作为直线的下一个坐标。以此类推,直到达到终点(x2,y2)为止,从而利用DDA算法实现线段的绘制。二、Bresenham算法画直线:设直线从起点(x1,y1)到终点(x2,y2),设直线方程为:y=kx+b其中b=y1-k*x1,根据DDA算法的讨论有:(1)(2)在1a象限里,即且,时,当直线光栅化时,x每次都增加1个单元:,y每次都增加k,由于k不一定是整数,因此由(2)式求出的y也不一定是整数。所以要用最靠近y的整

3、数来代替y,假设直线上第i个像素坐标为(xi,yi),那么,它的下一个点的像素点的可能位置为(xi+1,yi)或(xi+1,yi+1)。如图1所示:图1直线和像素坐标位置关系如上图在x=xi+1处,直线上y的值y=k(xi+1)+b,该点距离点(xi+1,yi)和点(xi+1,yi+1)的距离分别为d1和d2,其中a.当d1-d2>0时,说明直线上的理论点距离(xi+1,yi+1)较近,因此下一个直线像素点应取(xi+1,yi+1)。b.当d1-d2<0时,说明直线上的理论点距离(xi+1,yi)较近,因此下一个直线像

4、素点应取(xi+1,yi)。c.当d1-d2=0时,说明直线上的理论点距离上、下两个像素点的距离相等,因此规定取(xi+1,yi+1)作为下一个直线像素点。因此,利用(d1-d2)的符号就可以决定下一个像素点的选择。然而含有变量xi、yi,不利于计算。为此,我们构造一个新的判别式:(3)其中,,当时,和同号。以i+1代入式(2)中的i,得:(4)(4)-(3)可得:所以:当时,,当时,,其中同理可得直线斜率在其他范围时的递推关系式!第1a象限内的直线Bresenham算法思想如下:假设线段起点为(x1,y1),终点为(

5、x2,y2)1.画点(x1,y1);dx=x2-x1;dy=y2-y1;计算误差初值P1=2dy-dx;i=1;2.求直线的下一点位置:xi+1=xi+1;ifPi>0则yi+1=yi+1;否则yi+1=yi;3.画点(xi+1,yi+1);4.求下一个误差Pi+1;ifPi>0则Pi+1=Pi+2dy-2dx;否则Pi+1=Pi+2dy;5.然后根据Pi+1的符号,再求yi+2的坐标,依次类推,直到到达终点(x2,y2)。实验步骤:1.打开TurboC编程环境。2.编程实现DDA算法和Bresenham算法画直线。3

6、.算法示例:(1)DDA算法画直线:#include"stdio.h"#include"conio.h"#include"graphics.h"#defineround(x)((int)((x>=0)?(x+0.5):(x-0.5)));voidsetpixel(intx,inty){putpixel(x,y,4);putpixel(x,y+1,4);putpixel(x,y-1,4);putpixel(x-1,y,4);putpixel(x-1,y+1,4);putpixel(x-1,y-1,4);putpixel(

7、x+1,y,4);putpixel(x+1,y-1,4);putpixel(x+1,y+1,4);}DDAline(intx1,inty1,intx2,inty2){floatx=1+3*x1,y=1+3*y1;intz;floatk;if(x1==x2){if(y2>=y1){for(;y<=1+3*y2;y=y+3)setpixel(x,y);}else{for(;y>=1+y2*3;y=y-3)setpixel(x,y);}}else{k=(float)(y2-y1)/(x2-x1);if(k<=1&&k>=-1

8、&&x2>=x1){z=1+y1*3;for(;x<=1+x2*3;x=x+3){setpixel(x,z);y=y+3*k;z=round(y);}}if(k<=1&&k>=-1&&x2=1+x2*3;x=x-3){setpixel(x,z);y=y-3*k;z=round(y);}}i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。