Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Processing 平移后的旋转坐标_Processing - Fatal编程技术网

Processing 平移后的旋转坐标

Processing 平移后的旋转坐标,processing,Processing,有没有办法真正旋转坐标系 我希望能够不断地说x=x+1,但是使用translate使圆以不同的角度移动,类似于Turtle图形,并且根本不想使用Y轴 我试过旋转功能,但它只旋转物体,而不是它移动的方向,除非我做错了什么?我还不太熟悉向量,只是还没有很好地使用它们 提前谢谢。将旋转()功能想象为旋转相机。它确实会旋转坐标系,只是不像你说的那样 事实上,我认为海龟图形根本不旋转坐标系,它旋转海龟。您可以通过跟踪某些变量并自己进行旋转和绘图来实现这一点: float turtleX; float tu

有没有办法真正旋转坐标系

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

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

提前谢谢。

旋转()功能想象为旋转相机。它确实会旋转坐标系,只是不像你说的那样

事实上,我认为海龟图形根本不旋转坐标系,它旋转海龟。您可以通过跟踪某些变量并自己进行旋转和绘图来实现这一点:

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

这只是一个基本的例子,但希望它能说明我所说的。您可以将其添加到该类中以使其更美观,并且您甚至可以将其作为库导入,例如,如果您使用该类来教授学生,并且希望向他们隐藏该类的详细信息

但我会退一步问你为什么要用这种东西。如果你只是在玩,那很酷,但是你也可能会想尝试多“思考”。处理使用绝对坐标系,而不是相对乌龟(或笔),它的所有功能都是基于这一点设计的。伊姆霍,试图强迫别人用一种不同的思维方式来思考这类事情,这是徒劳的


但就像我说的,如果你这么做只是为了玩,那就太酷了

非常感谢,我这样问是因为我只使用了几个星期的处理程序,而且我有多年的海龟经验,我不是说海龟旋转了坐标,我只是想让它以类似的方式工作,这样我就可以把我做的一些项目转换成更简单的处理程序,“我认为进入大脑处理空间需要相当长的时间,但这让我知道了如何绕过它。”皮纳特明白。我已经编辑了我的答案,以包含一个不需要类的简单示例。