平移后的旋转坐标

Rotating coordinates after Translate

有没有真正旋转坐标系的方法?

我希望能够不断地说 x=x+1 但是使用平移让圆以不同的角度移动,类似于 Turtle Graphics,并且根本不想使用 Y 轴。

我试过旋转功能,但它只会旋转物体而不是物体移动的方向,除非我做错了什么?而且我还不熟悉矢量,只是还没有舒适地使用它们。

提前致谢。

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;
}

或者您可以使用 class:

封装它
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;
  }
}

这只是一个基本示例,但希望它能说明我在说什么。您可以添加此 class 以使其更漂亮,您甚至可以将其作为库导入,例如,如果您使用它来教学生并希望隐藏 class 的详细信息他们。

但我会退后一步,问你为什么要使用这种东西。如果您只是随便玩玩,那很好,但您也可以考虑尝试 "think in Processing" 多一点。 Processing 使用绝对坐标系而不是相对的 Turtle(或笔),并且它的所有功能在设计时都考虑到了这一点。试图将不同的思维方式强加于那种方式会破坏目的,恕我直言。

但是就像我说的,如果您这样做只是为了玩耍,那很好!