- 4
- 0
- 约 21页
- 2017-08-13 发布于安徽
- 举报
实 验 报 告
课程名称 计算机图形学 实验名称 小型绘图系统
姓 名 学 号 专业班级
实验日期 2011 年 12 月 26 日 成绩 指导教师 爨莹
一、实验目的
1.熟悉计算机图形的生成算法
2.用编程的方法实现计算机的生成算法
3.巩固计算机图形学中学到的一些理论知识
二、实验环境
软件:windows7 系统
三、实验内容与步骤(可提供屏幕抓图)
1)绘制直线
(1)DDA
算法的原理
DDA算法是根据直线的微分方程来计算Δx或Δy生成直线的扫描转换算法。 在一个坐标轴上以单位间隔对线段取样, 以决定另一个坐标轴方向上最靠近理想线段的整数值。
设(x0, y0)为直线段的始点, (x1, y1)为直线段的终点, 且端点坐标均为整数, 则直线的微分方程为
设|k|≤1, 则有
yi+1=kxi+1+b=k(xi+Δx)+b=yi+kΔx
上式表明, 若Δx=1, 则当x每递增1时, y递增k。
扫描转换开始时, 取直线始点(x0, y0)作为初始坐标。
程序代码:
void DDA-line(x0, y0, x1, y1, color)
int x0, y0, x1, y1, color;
{int x;
float y, k, deltx, delty;
deltx=x1-x0;
delty=y1-y0;
k=delty/deltx;
y=y0;
for(x=x0; x=x1; x++)
{ putpixel(x, int(y+0.5), clolor);
y=y+k;
}
实现截图
DDA算法绘制直线
(2)中点法
算法的原理
为了讨论的方便, 假定直线的斜率在0~1之间, 其它情况参照下述讨论进行处理。 假设直线的起点和终点分别为(x0, y0)和(x1, y1), 则直线方程为
? F(x, y)=ax+by+c=0
其中, a=y0-y1, b=x1-x0, c=x0y1-x1y0。 对于直线上的点, F(x,y)=0; 对于直线上方的点, F(x,y)>0; 而对于直线下方的点, F(x,y)<0。 如图3.1所示, 若直线在x方向上增加一个单位, 则在y方向上的增量只能在0和1之间。 假设横坐标为xP的各像素点中最佳逼近于理想直线的像素为(xP,yP), 用实心小圆表示。 ?那么, 下一个与直线最近的像素只能是正右方的P1(xP+1,yP)或右上方的P2(xP+1, yP+1)两者之一, 用空心小圆表示。 我们用P1和P2的中点M(xP+1, yP+0.5)与理想直线的位置关系来判定。
中点画线示意图
程序
void MidPoint-Line(x0, y0, x1, y1, color)
int x0, y0, x1, y1, color;
{ int a, b, delta1, delta2, d, x, y;
a=y0-y1;
b=x1-x0;
d=2*a+b
delta1=2*a;
x=x0;
y=y0;
putpixel(x, y, color);
while(xx1)
{ if(d0)
{ x++; y++;
d+=delta2;
}
else { x++;
d+=delta1;
}
putpixel(x, y, color);
}
}
}
实现截图
(3)Bresenham算法
算法的原理
Bresenham画线算法与中点画线法有相似之处, 也是通过在每列像素中确定与理想直线最近的像素来进行直线的扫描转换的。 为了讨论的方便,不妨也假定直线的斜率
您可能关注的文档
最近下载
- 平凡的世界读书分享.ppt VIP
- 药物化学习题仉文升主编).pdf VIP
- 2025年山东济南高三一模数学试卷及答案.pdf VIP
- 2025年辽宁省委党校在职研究生招生考试(政治理论)历年参考题库含答案详解.docx VIP
- 保险双录标准话术.pptx
- 2025年辽宁省委党校在职研究生招生考试(法学)历年参考题库含答案详解.docx VIP
- 江苏省南通市2025年中考语文试卷(附答案解析).doc VIP
- 《人工智能在机械设计制造及其自动化中的实践》8900字.docx VIP
- 普传(POWTRAN)变频器PI500变频器使用说明书.pdf
- 最新部编版一年级数学下册教案(全册)表格式二次备课.doc VIP
原创力文档

文档评论(0)