您的位置:首页 > 理论基础

计算机图形学之画线算法

2016-07-22 08:05 309 查看
一,DDA画线算法(easyX库)
#include
#include

// 四舍五入
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++)
{
Sleep(10);
putpixel(Round(x), Round(y), color); // 在坐标 (x, y) 处画一个 color 颜色的点
x += cx;
y += cy;
}
}

// 主函数
void main()
{
initgraph(640, 480);
// 测试画线
Line_DDA(1, 478, 638, 1, GREEN);
// 按任意键退出
getch();
closegraph();
}

二,Bresenham画线算法(easyX库)
#include
#include

void Bresenhamline (int x1,int y1,int x2,int y2,int color)
{
int x, y, dx, dy, s1, s2, p, temp, interchange, i;
x=x1;
y=y1;
dx=abs(x2-x1);
dy=abs(y2-y1);

if(x2>x1)
s1=1;
else
s1=-1;

if(y2>y1)
s2=1;
else
s2=-1;

if(dy>dx)
{
temp=dx;
dx=dy;
dy=temp;
interchange=1;
}
else
interchange=0;

p=2*dy-dx;
for(i=1;i<=dx;i++)
{
Sleep(10);
putpixel(x,y,color);
if(p>=0)
{
if(interchange==0)
y=y+s2;
else
x=x+s1;
p=p-2*dx;
}
if(interchange==0)
x=x+s1;
else
y=y+s2;
p=p+2*dy;
}
}

void main()
{
initgraph(640, 480);

// 测试画线
Bresenhamline(1, 478, 638, 1, GREEN);

// 按任意键退出
getch();
closegraph();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: