Подумайте о функции rotate()
как о повороте камеры. Он вращает систему координат, просто не так, как вы говорите.
Фактически, я бы сказал, что черепаховая графика не вращает систему координат, она вращает черепаху. Вы можете сделать это путем отслеживания некоторых переменных и делать повороты и рисунки сами:
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;
}
}
Это просто базовый пример, но, надеюсь, он показывает, о чем я говорю. Вы можете добавить к этому классу, чтобы сделать его более привлекательным, и вы могли бы даже импортировать это как библиотеку, если бы вы, например, использовали это для обучения студентов и хотели скрыть детали этого класса.
Но я хотел бы сделать шаг назад и спросить вас, почему вы хотите использовать этот тип вещей. Если вы просто играете, тогда это круто, но вы также можете подумать о попытке «подумать в обработке» немного больше. Обработка использует абсолютную систему координат вместо относительной черепахи (или пера), и все ее функции разработаны с учетом этого. Пытаясь заставить другой стиль мышления на этот сорт победить цель, имхо.
Но, как я уже сказал, если вы просто делаете это, чтобы играть, тогда это круто!
Большое спасибо, я спросил, потому что Ive только использовал обработку в течение нескольких недель и пришел из лет опыта черепахи, я не имел в виду, что черепаха повернула координаты, которые я только после основной идеи, чтобы заставить ее работать аналогичным образом, чтобы я мог перенести некоторые из проектов, которые Ive сделал для обработки намного проще, я думаю, что это займет довольно много времени, чтобы попасть в пространство обработки, но это дает мне представление о том, как обойти это. – PyNuts
@PyNuts Понял. Я отредактировал свой ответ, чтобы включить более простой пример, который не требует класса. –