计算机图形学直线段生成绘制的实现算法.doc
实验
一、实验目的和要求:
实现C语言编写图形程序。学会了解VC++的基本应用同时了解TC图形环境配置 ,学习简单的图形画法,并比较画法的优劣,尝试在计算机实现,得到图形,验证比较图形。、#include
#include
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=0;
c=200;
d=300;
e=RGB(0,255,0);
linedda(a,b,c,d,e);
getch();
closegraph();
}
运行结果:
Bresenham程序代码
#include
#include
// 使用 Bresenham 算法画任意斜率的直线(包括起始点,不包括终止点)
void Line_Bresenham(int x1, int y1, int x2, int y2, int color)
{
int x = x1;
int y = y1;
int dx = abs(x2 - x1);
int dy = abs(y2 - y1);
int s1 = x2 > x1 ? 1 : -1;
int s2 = y2 > y1 ? 1 : -1;
bool interchange = false;// 默认不互换 dx、dy
if (dy > dx)// 当斜率大于 1 时,dx、dy 互换
{
int temp = dx;
dx = dy;
dy = temp;
interchange = true;
}
int p = 2 * dy - dx;
for(int i = 0; i < dx; i++)
{
putpixel(x, y, color);
if (p >= 0)
{
if (!interchange)// 当斜率 < 1 时,选取上下象素点
y += s2;
else// 当斜率 > 1 时,选取左右象素点
x += s1;
p -= 2 * dx;
}
if (!interchange)
x += s1;// 当斜率 < 1 时,选取 x 为步长
else
y += s2;// 当斜率 > 1 时,选取 y 为步长
p += 2 * dy;
}
}
// 主函数
void main()
{
initgraph(640, 480);
// 测试画线
Line_Bresenham(100, 1, 1, 478, GREEN);
Line_Bresenham(1, 478, 638, 1, GREEN);
// 按任意键退出
getch();
closegraph();
}
运行结果:
3