翻译后旋转坐标

时间:2016-11-03 12:46:38

标签: processing

有没有办法实际旋转坐标系?

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

我已经尝试过旋转功能,但只是旋转物体而不是它移动的方向,除非我做错了什么?而且我还不熟悉那些尚未与他们轻松合作的载体。

提前谢谢。

1 个答案:

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

turtle

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

但我会后退一步,问你为什么要使用这类东西。如果你只是玩游戏那么这很酷,但你也可能想考虑尝试“再加上思考”。 Processing使用绝对坐标系代替相对Turtle(或笔),并且其所有功能都是为此而设计的。试图强迫不同的思维方式打破这种目的,imho。

但就像我说的那样,如果你只是这样玩,那就太酷了!