如何在C#中编写布雷森汉姆算法?
作者:互联网
我这样写,但仅在50%的情况下有效.有人可以说出什么问题吗?
public void Bresenham(int x1,int y1,int x2,int y2,Color c)
{
double dx = x2 - x1;
double dy = y2 - y1;
double d = 2*dy-dx; //aux variable
double p1 = 2 * dy ;
double p2 = 2 * (dy - dx);
int x = x1;
int y = y1;
int xend;
c = kolor;
if (x1 > x2)
{
x = x2;
y = y2;
xend = x1;
}
else
{
x = x1;
y = y1;
xend = x2;
}
bitmapa.SetPixel(x, y,c);
try
{
while (x < xend)
{
x++;
if (d < 0)
{
d += p1;
}
else
{
d += p2;
y += 1;
}
bitmapa.SetPixel(x, y, c);
}
}
谢谢:)
解决方法:
乍一看,您错过了像现在那样处理Y时应该处理其他坐标的情况. DX,如果DX< DY,即线的斜率不同. 要理解我的意思,请看陡峭的here.
实际上,您的算法仅在1/4种情况下有效.
标签:graph-algorithm,c 来源: https://codeday.me/bug/20191102/1994596.html