【问题标题】:Line not drawing properly线没有正确绘制
【发布时间】:2018-06-15 13:32:15
【问题描述】:

所以当我发现 Bresenham 算法时,我正在四处寻找线算法。我决定制作它的代码版本,并且在大多数情况下,它有效。然而,当我想画一个正方形时,我遇到了一个问题。它不会画出一条线。这是我的代码(我应该提到我正在使用 p5.js):

function drline(xs, ys, xe, ye) {
 if(xs == xe && ys == ye){
   point(xs, ys);
 } else {
   var df = (ye - ys) / (xe - xs);
   var lf = 0;
   var tf = 0;
   var is = 0;
   for(var i = xs; i <= xe; i++){
     tf = i - xs;
     lf = df * tf;
     is = lf+ys;
     console.log("X: " + i + ", Y: " + is);
     point(i, is);
   }
 }
}

function init(){
  createCanvas(700, 600);
  background(80);
  stroke(100, 200, 255);

}

function setup(){
 init();
 drline(300, 100, 400, 100);
 drline(300,200, 400, 200);
 drline(300, 100, 300, 200);
}

我还注意到控制台上的最后一个值是 X:300,Y:NaN。抱歉,如果这听起来有点笨拙,但我不确定问题是什么。先感谢您! :)

【问题讨论】:

    标签: javascript p5.js bresenham


    【解决方案1】:

    您遇到“除以零”错误。

    在你的最后一行:

     drline(300, 100, 300, 200);
            ^xs       ^xe
    

    我假设 xs = xStart,并且 xe = xEnd

    在这条线上,您正在尝试计算角度...但如果 xs 和 xe 相等,您最终会得到一个 0(零)分母。

     var df = (ye - ys) / (xe - xs);
    

    因此,您将得到一个NaN,因为这是不可能的计算。

    您需要在逻辑中添加一个特殊条件 if((xe - xs) == 0){...}(例如,没有运行的垂直上升,或“未定义”坡度)并相应地处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      相关资源
      最近更新 更多