[英]Bresenham's line drawing Code
我正在尝试使用Bresenham的算法在C语言中画一条线。我在dosbox中使用turbo C ++来实现这个代码。虽然编译我没有得到任何错误但是当我运行代码时程序终止后获得2个坐标。请帮助..
编译时的消息如下..
目录路径如下
我的代码..
# include <stdio.h>
# include <conio.h>
# include <graphics.h>
void main()
{
int dx,dy,x,y,p,x1,y1,x2,y2;
int gd,gm;
clrscr();
printf("\n\n\tEnter the co-ordinates of first point : ");
scanf("%d %d",&x1,&y1);
printf("\n\n\tEnter the co-ordinates of second point : ");
scanf("%d %d",&x2,&y2);
dx = (x2 - x1);
dy = (y2 - y1);
p = 2 * (dy) - (dx);
x = x1;
y = y1;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"e:\\tc\\bgi");
putpixel(x,y,WHITE);
while(x <= x2)
{
if(p < 0)
{
x=x+1;
y=y;
p = p + 2 * (dy);
}
else
{
x=x+1;
y=y+1;
p = p + 2 * (dy - dx);
}
putpixel(x,y,WHITE);
}
getch();
closegraph();
}
OP应该发布使用的输入。
发布的示例代码不起作用是x1
> x2
, y1
> y2
。 这是一组可以突然停止例程的输入。 要修复, dx
和dy
应该基于绝对值,增量x
和y
步骤需要独立地为+1
或 -1
。
输入3,4
而不是3 4
(逗号与空格)也将使例程陷入困境。
在while循环中,建议if(p <= 0)
。
OP的“......程序在获得2个坐标后终止。” 不够详细,当然代码应该在获得2个坐标后的某个时间终止。 但OP没有详细说明它过早终止的地方。
这是启动调试器并逐步完成代码,观察任何变量的典型完美点。 如果调试器不可用,则对控制台进行printf调试是备用选择。
第一个提示是检查这些行是否不会生成错误/异常:
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"e:\\tc\\bgi");
putpixel(x,y,WHITE);
解决问题的方法是根据屏幕截图中提到的地址更改initgraph函数中的路径。
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");
putpixel(x,y,WHITE);
不错的计划。 但是,你没有初始化任何循环以及while循环中编码的行部分不正确。 这是我的尝试: -
i = 1; // loop initialization
do {
putpixel(x, y, 15);
while(p >= 0) {
y = y + 1;
p = p - (2 * dx);
}
x = x + 1;
p = p + (2 * dy);
i = i + 1;
}
while(i <= dx);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.