计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法
更新时间:2023-06-09 11:54:01 阅读量: 实用文档 文档下载
- 计算机图形学推荐度:
- 相关推荐
计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法
实验名称 数值微分(DDA)法、中点画线法、Bresenham算法 实验时间 年 月 日
专 业 姓 名 学 号
预 习 操 作 座 位 号
教师签名 总 评
一、实验目的:
1.了解数值微分(DDA)法、中点画线法、Bresenham算法的基本思想;
2.掌握数值微分(DDA)法、中点画线法、Bresenham算法的基本步骤;
二、实验原理:
1.数值微分(DDA)法 y1 y0k 已知过端点 P 0 0 , y ( x 的直线段L:y=kx+b,直线斜率为 ( x0),P11,y1)x1 x0x 从x的左端点 0 开始,向x右端点步进。步长=1(个象素),计算相应的y坐标y=kx+b;取象素点(x, round(y))作为当前点的坐标。
2.中点画线法
当前象素点为(xp, yp) 。下一个象素点为P1 或P2 。
设M=(xp+1, yp+0.5),为p1与p2之中点,Q为理想直线与x=xp+1垂线的交点。将Q与
M的y坐标进行比较。
当M在Q的下方,则P2 应为下一个象素点;
当M在Q的上方,应取P1为下一点。
构造判别式:d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c,其中a=y0-y1, b=x1-x0,
c=x0y1-x1y0。
当d<0,M在L(Q点)下方,取右上方P2为下一个象素;
当d>0,M在L(Q点)上方,取右方P1为下一个象素;
当d=0,选P1或P2均可,约定取P1为下一个象素;
但这样做,每一个象素的计算量是4个加法,两个乘法。
d是xp, yp的线性函数,因此可采用增量计算,提高运算效率。
若当前象素处于d 0情况,则取正右方象素P1 (xp+1, yp), 要判下一个象素位置,应计算
d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a; 增量为a。
若d<0时,则取右上方象素P2 (xp+1, yp+1)。要判断再下一象素,则要计算
d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ;增量为a+b。
3.Bresenham算法
过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂
计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法
直网格线的交点,然后根据误差项的符号确定该列象素中与此交点最近的象素。
设直线方程为:y i ,其中k=dy/dx。 因为直线的起始点在1 yi k(xi 1 xi) yi k
象素中心,所以误差项d的初值d0=0。
X下标每增加1,d的值相应递增直线的斜率值k,即d=d+k。一旦d≥1,就把它减去1,这样保证d在0、1之间。
当d≥0.5时,最接近于当前象素的右上方象素( x i 1 , y i 1),而当d<0.5时,更接近
y i )于右方象素( x i 1, 。为方便计算,令e=d-0.5,e的初值为-0.5,增量为k。
当e≥0时,取当前象素(xi,yi)的右上方象素( , y i 1 );而当e<0时,更接近于x i 1x i 1右方象素( , y i )。
最终,Bresenham算法也是每个象素,需一个整数算法,其优点是可以用于其他二次曲线。
三、实验内容:
1.DDA画线法:
void DDALine(CDC *pdc,int x0,int x1,int y0,int y1,int color)
{
float k=1.0*(y1-y0)/(x1-x0);
int x=0,int y=y0;
for(x=0;x<=x1;x++)
{
pdc->SetPixel(x,y,color);
y=y+k;
}
}
void CMy3View::On2()
{
// TODO: Add your command handler code here
int x0,y0,x1,y1,color;
x0=111;
y0=111;
x1=138;
y1=138;
color=RGB(0,0,255);
CClientDC dc(this);
DDALine(&dc,x0,x1,y0,y1,color);
}
2.Midpoint中点画线法:
void Midpoint_Line(CDC *pdc,int x0,int y0,int x1,int y1,int color)
{
计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法
int a,b,d,d1,d2,x,y;
a=y0-y1,b=x1-x0,d=2*a+b;
d1=2*a,d2=2*(a+b);
x=x0,y=y0;
pdc->SetPixel(x,y,color);
while(x<x1)
{
if(d<0)
{
x++;
y++;
d+=d1;
}
else
{
x++;
d+=d2;
}
pdc->SetPixel(x,y,color);
}
}
void CMy2View::On1()
{
// TODO: Add your command handler code here
int x0,x1,y0,y1,color;
x0=111;
y0=111;
x1=138;
y1=138;
color=RGB(255,0,0);
CClientDC dc(this);
Midpoint_Line(&dc,x0,y0,x1,y1,color);
}
3.Bresenham画线法:
void Bresenham_Line(CDC *pdc,int x0,int y0,int x1,int y1,int color)
{
int x,y,dx,dy,i;
float k,e;
dx=x1-x0,dy=y1-y0,k=dy/dx;
e=-0.5,x=x0,y=y0;
for(i=0;i<=dx;i++)
计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法
{
pdc->SetPixel(x,y,color);
x=x+1;
e=e+k;
if(e>=0)
{
y++,e=e-1;
}
}
}
void CMy1View::On1()
{
// TODO: Add your command handler code here
int x0,x1,y0,y1,color;
x0=111;
y0=111;
x1=138;
y1=138;
color=RGB(0,255,0);
CClientDC dc(this);
Bresenham_Line(&dc,x0,y0,x1,y1,color);
}
四、实验总结:
在程序代码段的第一句话中一定要注明“CDC *pdc”,否则会出现错误,相应的,在for循环或while循环语句中的“(x,y,color)”前面要改为“pdc->SetPixel”。在程序第二段的倒数第二句“CClientDC dc(this);”一定不能漏写,最后一句中,括号里一定要注意不能漏写了“&dc”。另外,还需注意分号的使用,有的地方时分号,有的地方时逗号,一定要注意区分。
正在阅读:
计算机图形学 实验 数值微分(DDA)法、中点画线法、Bresenham算法06-09
沈阳市人力资源和社会保障局劳动关系管理信息系统操作手册(企业用)08-31
2012年度外汇业务资格准入测试复习题20120910-07
江西中考政治分析评论题标题及角度汇总(考场速查-标注清楚)05-01
返工与修理04-27
乡镇20xx年精神文明建设工作规划02-25
勇敢的心观后感800字04-02
赞美老师的作文500字03-31
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 点画
- 微分
- 数值
- 算法
- Bresenham
- 图形
- 实验
- 计算机
- DDA
- 四年级国防教育教案例一
- Study of Machining Error Forecast in NC Lathe - 副本
- Lesson 3 living abroad 刘玉玲
- 呼叫中心管理培训--绩效考核实务操作
- 实验08 队列(循环队列)的表示和实现
- 《水浒传》中一百单八将的名字及其绰号
- 历史解析卷&183;2015届四川省成都市高三摸底(零诊)考试word版
- 《匆匆》课例研究
- 2015-2020年中国电力物流行业发展趋势及战略咨询报告
- 职业卫生与可持续发展优选稿
- 14-15下期期中考试总结
- 速度快并且容易中的材料类SCI期刊
- 饲料供应合同2011.11
- 数学竞赛中多变量最值问题的常用解法
- (搞工程项目经理必看)最全的建筑工程项目经理岗位职责以及如何把控现场
- FS0801C系列燃气报警器
- 蔬菜脆片项目可行性研究报告
- 如何辨别色环电阻阻值
- 模拟电路与数字电路_第7章 直流稳压电源
- 学习党章思想汇报范文