如何围绕中心旋转 PShape?
How to rotate a PShape around its centre?
Processing 手册(第二版)中的示例 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);
}
本书中的图片显示了围绕 canvas 中心旋转的形状。
然而,当我 运行 那个确切的代码时,形状围绕 canvas 左上角的 [0,0] 点旋转。
-50, -50 平移和 50, 50 坐标对我来说似乎暗示(基于我有限的理解)旋转应该以 [50, 50] 点为中心,但这不是'当我 运行 代码时,你还看不出来吗?关于如何让形状围绕其中心旋转有什么想法吗?
我的意思是具体使用 zig.rotate() 方法,我知道您可以将 canvas 作为一个整体进行平移和旋转,但我想专门围绕其中心旋转此形状。
创建 PShapes 后可以更改原点吗?
谢谢!
我能够使用默认渲染器在 3.0a10 中重现这一点。如果我将 P2D
指定为渲染器 size(100,100,P2D)
,PShape
将按预期围绕中心点旋转。在 2.2.1 版本中指定 P2D 也有效。
所以我认为这看起来像是一个错误。也许值得在 Processing Github?
上开个 issue
更新:似乎已经有 open issue for this.
Processing 手册(第二版)中的示例 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);
}
本书中的图片显示了围绕 canvas 中心旋转的形状。
然而,当我 运行 那个确切的代码时,形状围绕 canvas 左上角的 [0,0] 点旋转。
-50, -50 平移和 50, 50 坐标对我来说似乎暗示(基于我有限的理解)旋转应该以 [50, 50] 点为中心,但这不是'当我 运行 代码时,你还看不出来吗?关于如何让形状围绕其中心旋转有什么想法吗? 我的意思是具体使用 zig.rotate() 方法,我知道您可以将 canvas 作为一个整体进行平移和旋转,但我想专门围绕其中心旋转此形状。 创建 PShapes 后可以更改原点吗? 谢谢!
我能够使用默认渲染器在 3.0a10 中重现这一点。如果我将 P2D
指定为渲染器 size(100,100,P2D)
,PShape
将按预期围绕中心点旋转。在 2.2.1 版本中指定 P2D 也有效。
所以我认为这看起来像是一个错误。也许值得在 Processing Github?
上开个 issue更新:似乎已经有 open issue for this.