0

我正在尝试绘制一系列相互连接的线条和形状。由于一些计算,我正在为线条/形状做坐标最终是非整数,在这种情况下,结束和开始于相同非整数坐标的线条之间存在间隙。
例如对于此代码:

  void setup() {
    noLoop();
    size(500, 500);
  }
  
  void draw() {
  stroke(1);
  strokeWeight(100);
  strokeCap(SQUARE);
  line(0, 0, 0, 200.5);
  line(0, 200.5, 0, 401);
  }

我得到了这个结果(注意两行之间的差距): 两行并排 在 p5.js 中也试过这个,结果相同。这是如何工作的?做完数学后我应该总是四舍五入吗?

4

1 回答 1

0

在将 background() 调用添加到 draw() 之后,问题现在似乎出在我最初认为的 SQUARE strokeCap 而不是 noLoop() 上。REM 出 strokeCap(SQUARE) 并且运行正常。UN-REM 它和行返回有或没有 noLoop(); PROJECT caps 和 no caps 仍然没有线条,有或没有 noLoop()。我不认为浮点值有什么不同。请注意,我删除了 strokeCap(SQUARE) 的十进制值以排除这种可能性。我无法告诉你为什么用 strokeCap(SQUARE) 出现线条,但我看到摆脱线条的唯一方法是使用 PROJECT 选项,根本没有大写,或者保留它们,但重叠末端1分。无论如何,Processing Reference 声明 line() 的所有参数都是浮点数。

void setup() {
  size(500, 500);
  noLoop();
}

void draw() {
  background(209); // Added and it makes a difference
  stroke(0);
  strokeWeight(50);
  // NO cap
  line(60, 80, 180.3, 80);  
  line(180.3, 80, 280.8, 80);
  line(280.8, 80, 380.5, 80);
  // (SQUARE) cap
  strokeCap(SQUARE); // REM this out to get rid of lines
  line(60, 160, 160, 160);
  line(160, 160, 260, 160);
  line(260, 160, 360, 160);
  // (PROJECT) cap
  strokeCap(PROJECT);
  line(60, 260, 160.5, 260);
  line(160.5, 260, 260.5, 260);
  line(260.5, 260, 360.5, 260);
  // (SQUARE) cap with 1 point of overlap
  strokeCap(SQUARE); // No lines with overlap
  line(60, 360, 160.8, 360);
  line(159.8, 360, 260.3, 360);
  line(259.3, 360, 360.5, 360);
}

于 2022-01-11T00:04:03.403 回答