计算机图形学:直线段扫描转换算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机图形学:直线段扫描转换算法相关的知识,希望对你有一定的参考价值。

描述三种直线扫描算法(DDA法,中点法,Bresenham法)的基本思想,分析比较这三种算法的优缺点,并用中点画线算法扫描转换连接两点P0(0,0)和P1(5,2)的直线段,写出算法过程及直线所经过的像素点。

参考技术A //数值微分算法(DDA算法)
#include<iostream>
using namespace std;
int main()

float x0,y0,x1,y1,x2,y2;
cin>>x1>>y1;
cin>>x0>>y0;
float k;
k=(y1-y0)/(x1-x0);
if(k<1)

x2=x1+1;
y2=y2+k;

else if(k>=1)

y2=y1+1;
x2=1/k+x1;

cout<<x2<<" "<<y2<<endl;
return 0;

//中点划线算法
#include<iostream>
using namespace std;
int main()
float x,y;
float x0,y0,x1,y1;
cin>>x0>>y0>>x1>>y1;
float a,b,c;
a=y0-y1;
b=x1-x0;
c=x0*y1-x1*y0;
float sum;
sum=a*x+b*y+c;
float Xq,Yq;
float Xm,Ym;
Xm=x0+1;
Ym=y0+0.5;
float d;
d=a*Xm+b*Ym+c;
if(d<0)
Xq=x0+1; Yq=y0+1;
else if(d>0)
Xq=x0+1; Yq=y0;
else if(d=0)
Xq=x0+1; Yq=y0;
cout<<Xq<<" "<<Yq<<endl;return 0;

//Bresenham算法//有一个整数数组,请求出两两之差绝对值最大的值(最小的值)
#include<iostream>
using namespace std;
int jisuan(int a,int b)
int des=0; des=a-b; if(des<0)
des=-des;
return des;
int main()
int dec=0; int max=0; int a[5]=0,2,5,9,4; for(int i=1;i<5;i++)
dec=jisuan(a[i],a[i-1]); if(max<dec) max=dec;
cout<<max<<endl;
return 0;

不好意思,最后一个是我写的另一个代码,贴错了
参考技术B

所有线条扫描算法实现

求计算机图形学中的直线绘制函数法、DDA算法、中点法和Bresenham算法的优缺点以及比较.

如题,求各种算法的优缺点以及之间的比较,最好可以有一千多字,很急的,谢谢各位大神!
可以回答,也可以发到我的邮箱.感激不尽!
谢谢各位了!分不多,已经是我全部的了...
邮箱:kokingwang@163.com

参考技术A Bresenham算法的特点是:
1,不必计算直线之斜率,因此不做除法;

2,不用浮点数,只用整数;
3,只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现.

Bresenham算法速度很快,并适于用硬件实现.
DDA算法的特点:
浮点数运算
不易硬件实现
中点画线法特点:

只有整数运算,不含乘除法
可用硬件实现
因(X0,Y0)在直线上,所以F(X0,Y0)=0

以上是关于计算机图形学:直线段扫描转换算法的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学 - 直线的扫描转换算法

计算机图形学 - 直线的扫描转换算法

计算机图形学——直线扫描转换

光栅图形学:直线段的扫描转换算法

计算机图形学之扫描转换直线-DDA,Bresenham,中点画线算法

求计算机图形学中的直线绘制函数法、DDA算法、中点法和Bresenham算法的优缺点以及比较.