gpt4 book ai didi

java - 如何制定 Bresenham 线算法?

转载 作者:行者123 更新时间:2023-12-02 12:05:44 24 4
gpt4 key购买 nike

我编写了一个小程序,它根据用户输入 x1,y1 和 x2,y2 绘制一条线。由于某种原因,线条只能在水平时起作用,但是一旦线条应该是垂直的,它只会向我显示黑色像素而不是线条。我已经检查了所有内容,并且非常确定我的算法是正确的,但问题仍然存在。

int x1 = Integer.parseInt(this.jTextFieldX1.getText());
int y1 = Integer.parseInt(this.jTextFieldY1.getText());
int x2 = Integer.parseInt(this.jTextFieldX2.getText());
int y2 = Integer.parseInt(this.jTextFieldY2.getText());

int xi = x2 > x1 ? 1:-1;
int yi = y2 > y1 ? 1:-1;

int dx = Math.abs(x2-x1);
int dy = Math.abs(y2-y1);

int xn= x1;
int yn= y1;
int pn;
canvas.showBlackPixel(xn,yn);

if (dx > dy)
{
pn= 2*dy - dx;
while (xn != x2)
{
if (pn >0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dy - 2*dx;

}
else
{
xn = xn + xi;
pn = pn+ 2*dy;
}
canvas.showBlackPixel(xn,yn);
}
{

if (dy > dx)
{
pn= 2*dx - dy;
while (yn != y2)
{
if (pn > 0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dx - 2*dy;


}
else
{
yn = yn + yi;
pn = pn + 2*dx;
}
canvas.showBlackPixel(xn,yn);
}

}

}






}


}

我该如何解决这个问题?

最佳答案

问题出在你的语句的终止上,也就是说你的大括号 {} 有点混淆了。具体来说,减少代码的相关部分:

    if (dx > dy) 
{
...
if (dy > dx)
{
...
}
}

如果你修复牙套,那么看起来效果应该会更好。

    if (dx > dy) 
{
...
}
if (dy > dx)
{
...
}

尽管如此,当 dx == dy 时你仍然会遇到问题。

关于java - 如何制定 Bresenham 线算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com