《处理手册》(第二版)以示例17-10为例:

PShape zig;

void setup() {
  size(100, 100);
  zig = createShape();
  zig.beginShape();
  zig.fill(0);
  zig.noStroke();
  zig.vertex(10, 0);
  zig.vertex(100, 30);
  zig.vertex(90, 70);
  zig.vertex(100, 70);
  zig.vertex(10, 90);
  zig.vertex(50, 40);
  zig.endShape();
  zig.scale(0.7);
  zig.translate(-50, -50);
}

void draw() {
  background(204);
  shape(zig, 50, 50);
  zig.rotate(0.01);
}


书中的图像与该示例一起显示了围绕画布中心旋转的形状。

但是,当我运行该确切的代码时,形状围绕画布左上方的[0,0]点旋转。

-50,-50平移和50,50坐标确实向我暗示(基于我的有限理解),旋转应该以[50,50]点为中心,但是当我这样做时,这一点不成立运行代码?关于如何使形状围绕其中心旋转有任何想法吗?
我的意思是专门使用zig.rotate()方法,我知道您可以将画布整体平移和旋转,但是我想围绕它的中心专门旋转此形状。
创建PShapes原点后可以更改它吗?
谢谢!

最佳答案

我能够使用默认渲染器在3.0a10中重现此内容。如果将P2D指定为渲染器size(100,100,P2D),则PShape会按预期绕中心点旋转。在2.2.1版中指定P2D也可以。

所以我认为这看起来像个错误。也许值得在Processing Github上发布一个问题?

更新:似乎已经有一个open issue for this

10-08 19:41