有没有办法实际旋转坐标系?
我希望能够经常说x = x + 1,但是使用平移,使用平移在不同角度移动圆圈,类似于Turtle Graphics,并且根本不想使用Y轴。
我已经尝试过旋转功能,但只是旋转物体而不是它移动的方向,除非我做错了什么?而且我还不熟悉那些尚未与他们轻松合作的载体。
提前谢谢。
答案 0 :(得分:2)
将rotate()
功能视为旋转相机。它确实会旋转坐标系,而不是你正在谈论的方式。
事实上,我认为Turtle Graphics根本不会旋转坐标系,它会旋转Turtle。您可以通过跟踪一些变量并自己进行旋转和绘图来实现这一目标:
float turtleX;
float turtleY;
float turtleHeading = 0;
void setup() {
size(500, 500);
turtleX = width/3;
turtleY = height/4;
}
void draw() {
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
rotateTurtle(45);
forward(100);
noLoop();
}
void forward(float amount) {
float newX = turtleX + cos(radians(turtleHeading)) * amount;
float newY = turtleY + sin(radians(turtleHeading)) * amount;
line(turtleX, turtleY, newX, newY);
ellipse(newX, newY, 10, 10);
turtleX = newX;
turtleY = newY;
}
void rotateTurtle(float degrees) {
turtleHeading += degrees;
}
或者您可以使用类封装它:
Turtle turtle;
void setup() {
size(500, 500);
turtle = new Turtle(width/3, height/4);
}
void draw() {
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
turtle.rotate(45);
turtle.forward(100);
noLoop();
}
class Turtle {
float x;
float y;
float heading = 0;
public Turtle(float x, float y) {
this.x = x;
this.y = y;
}
void forward(float amount) {
float newX = x + cos(radians(heading)) * amount;
float newY = y + sin(radians(heading)) * amount;
line(x, y, newX, newY);
ellipse(newX, newY, 10, 10);
x = newX;
y = newY;
}
void rotate(float degrees) {
heading += degrees;
}
}
这只是一个基本的例子,但希望它能说明我在说什么。您可以添加到此类以使其更加漂亮,您甚至可以将其作为库导入,例如,您可以使用它来教学生并希望隐藏类的详细信息。
但我会后退一步,问你为什么要使用这类东西。如果你只是玩游戏那么这很酷,但你也可能想考虑尝试“再加上思考”。 Processing使用绝对坐标系代替相对Turtle(或笔),并且其所有功能都是为此而设计的。试图强迫不同的思维方式打破这种目的,imho。
但就像我说的那样,如果你只是这样玩,那就太酷了!