2016-11-03 6 views
2

실제로 좌표계를 회전하는 방법이 있습니까?번역 후 좌표 회전

x = x + 1을 계속 말하고 싶지만 터틀 그래픽과 비슷한 번역을 사용하여 다른 각도로 원을 움직이고 Y 축을 전혀 사용하지 않으려 고합니다.

회전 기능을 사용해 보았습니다.하지만 뭔가 잘못된 일을하지 않는 한 움직이는 방향이 아니라 객체를 회전시킵니다. 그리고 저는 아직 벡터와 친숙하지 않아서 편안하게 작업 할 수 있습니다.

미리 감사드립니다.

답변

2

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

turtle

이 단지입니다 기본 예제지만, 바라건대 내가 말한 것을 보여줍니다. 이 클래스에 추가하여 더 멋지게 만들 수 있습니다. 예를 들어 이것을 사용하여 학생을 가르치고 클래스의 세부 정보를 숨길 경우 라이브러리로 가져올 수도 있습니다.

하지만 한 걸음 물러서서 왜 이런 유형의 것을 사용할지 묻습니다. 주변을 놀고 있다면 멋지다.하지만 "처리를 생각하라"고 생각할 수도있다. 프로세싱은 상대적 거북 (또는 펜) 대신 절대 좌표 시스템을 사용하며, 모든 기능은이를 염두에두고 설계되었습니다. 그런 생각에 다른 스타일의 생각을 강요하려는 목적은 이모를이기는 것입니다.

하지만 내가 말했듯이, 당신이 이걸 놀기 만한다면 멋지다!

+0

고맙습니다. 몇 주 동안 처리 만 해본 경험이 있기 때문에 물었습니다. 거북이가 좌표를 회전시키지 않았다는 것을 의미하지 않았습니다. 이와 비슷한 방식으로 Ive가 처리 작업을 훨씬 쉽게 처리 할 수 ​​있도록 처리 헤드 공간에 들어가기까지 꽤 오래 걸릴 것이라고 생각합니다.하지만이 방법을 사용하면 해결 방법에 대한 아이디어를 얻을 수 있습니다. – PyNuts

+1

@PyNuts 알기. 내 대답을 편집하여 클래스가 필요없는 간단한 예제를 포함합니다. –