2016-11-03 7 views
2

実際に座標系を回転する方法はありますか?Translate後の回転座標

私は常にx = x + 1と言うことができますが、Turtle Graphicsに似た、translateを使用して円を異なる角度で動かし、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は理解しています。私は答えを編集して、クラスを必要としない簡単な例を追加しました。 –

関連する問題