- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(绘制任意斜率的直线
淮海工学院计算机工程学院
实验报告书
课程名: 计算机图形学
题 目: 绘制任意斜率的直线
班 级: 测绘121
学 号: 2012122827
姓 名: 王其芳
一、实验目的或要求
掌握任意斜率直线的绘制算法。
掌握直线中点Bresenham算法的基本原理,能够用VC++实现该算法。
实验内容
1、掌握直线段的生成算法,并用C++实现算法,包括中点法生成
直线。
2、编程实现DDA算法、Bresenham算法、中点画线法绘制直线段
三、实验代码
1、生成直线的DDA算法
算法思想:一个坐标轴上以单位间隔增量,决定另一个坐标轴上最靠近线段路径的对应整数值。假定x2﹣x1的绝对值大于y2﹣y1的绝对值,取x为一个象素单位长,即x 每次递增一个象素,然后利用下式计算相应的y值:yk+1﹦yk﹢△y﹦yk﹢m·△x
对于|m|>1的线段,可通过计算由Y方向的增量△y引起的改变来生成直线: xk+1﹦xk﹢△x﹦xk﹢m·△y
生成直线的DDA算法思想是源用初中直线的方程得出来的,而生成直线的中点算法是通过将DDA算法的方程式改为隐函数形式,然后通过与中点的比较确定该取的像素,绘制图线。
/* DDA */
#includegraphics.h
void linedda(int x0,int y0,int x1,int y1,int color)
{
int x,dy,dx,y;
float m;
dx=x1-x0;
dy=y1-y0;
m=dy/dx;
y=y0;
for(x=x0;x=x1;x++)
{
putpixel(x,(int)(y+0.5),color);
y+=m;
}
}
main()
{
int a,b,c,d,e;
int graphdriver=DETECT;
int graphmode=0;
initgraph(graphdriver,graphmode,);
cleardevice();
a=0;
b=100;
c=200;
d=300;
e=200;
linedda(a,b,c,d,e);
getch();
closegraph();
}
运行结果:
VC++环境:
#include graphics.h
#include conio.h
// 四舍五入
int Round(float x)
{
return (int)(x 0 ? x - 0.5 : x + 0.5);
}
// 使用 DDA 算法画任意斜率的直线(包括起始点,不包括终止点)
void Line_DDA(int x1, int y1, int x2, int y2, int color)
{
float x, y; // 当前坐标点
float cx, cy; // x、y 方向上的增量
int steps = abs(x2 - x1) abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1);
x = (float)x1;
y = (float)y1;
cx = (float)(x2 - x1) / steps;
cy = (float)(y2 - y1) / steps;
for(int i = 0; i steps; i++)
{
putpixel(Round(x), Round(y), color); // 在坐标 (x, y) 处画一个 color 颜色的点
x += cx;
y += cy;
}
}
// 主函数
void main()
{
initgraph(640, 480);
// 测试画线
Line_DDA(100, 100, 100, 478, RED);
// 按任意键退出
getch();
}
2、Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点。这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的算法。
Bresenham画法与中点法相似,都是通过每列象素中确定与理想直线最近的像素来进行直线的扫描的转换的。通过各行、各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的像素。该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只需要检查一个误差项的符号,就可以确定该列的所有对象。
根据直线的斜率确定选择变量在X方向
您可能关注的文档
- (口译答案.doc
- (课标版2012届高三全国高考模拟重组预测试卷2A英语.doc
- (经营管工作总结.doc
- (口试分类词汇汇编编辑.doc
- (课标版2012届高三语文全国高考模拟重组预测试卷2A.doc
- (课标版六年级上册第六单元综合性学习轻叩诗歌大门练习题.doc
- (课标版小语五下按课文内容填空及答案.doc
- (课标版高二下学期期初考试语文试题.doc
- (课标知识答案.doc
- (经营管理工作流程.doc
- 福莱特玻璃集团股份有限公司海外监管公告 - 福莱特玻璃集团股份有限公司2024年度环境、社会及管治报告.pdf
- 广哈通信:2024年度环境、社会及治理(ESG)报告.pdf
- 招商证券股份有限公司招商证券2024年度环境、社会及管治报告.pdf
- 宏信建设发展有限公司2024 可持续发展暨环境、社会及管治(ESG)报告.pdf
- 品创控股有限公司环境、社会及管治报告 2024.pdf
- 中信建投证券股份有限公司2024可持续发展暨环境、社会及管治报告.pdf
- 洛阳栾川钼业集团股份有限公司环境、社会及管治报告.pdf
- 361度国际有限公司二零二四年环境、社会及管治报告.pdf
- 中国神华能源股份有限公司2024年度环境、社会及管治报告.pdf
- 广西能源:2024年环境、社会及治理(ESG)报告.pdf
最近下载
- 机械行业“人形机器人的Optimus时刻”系列(五):触觉感知(电子皮肤),高山将越,坦途在望.pdf
- 培训教材污水处理厂运营管理方案.pptx VIP
- 纪检委处理回复函.docx
- AP微积分BC 2016年真题 (选择题+问答题) AP Calculus BC 2016 Released Exam and Answers (MCQ+FRQ).pdf VIP
- 武汉市2025届高中毕业生四月调研考试(四调)物理试卷(含答案).pdf
- 《西安事变》课件.ppt VIP
- 排水沟设计计算11.xls VIP
- 2010版中药典,中国药典2010年版.doc
- 精彩拍摄跟我来.docx
- 小学常用单词分类汇总衡水体英语字帖(含例句).pdf
文档评论(0)