処理で混乱するのは座標系です。Processing では、原点 (0,0) は画面の左上にあり、正の座標のみが画面に表示されます。これに対する非常に一般的な回避策は、次を呼び出すことです。
translate(width/2, height/2);
メソッドの最初にvoid draw()
。こうすることで、0,0 がスケッチの中心になり、その後呼び出されるメソッドrotate(radians(65))
はスケッチの中心からアクションを実行します。
P3D
またはOPENGL
レンダラーを使用するスケッチは多くの場合、変換を呼び出して座標系を使いやすいものに変更するため、これも良いことです。たとえば、0,0 または 0,0,0 にあるオブジェクトは中心にあり、オブジェクトの周りをカメラで周回したり、オブジェクトをその中心を中心に回転させたりすることが容易になります。
オブジェクトを描画する別の一般的な方法は、各オブジェクトの座標を指定する代わりに、上記のように原点を設定することです。つまり、rect(-100, -50, 50, 50)
以下に示すように、0,0 で各オブジェクトを描画する前に、変換の前に popMatrix() と pushMatrix を使用します。
translate(width/2, height/2);
pushMatrix();
translate(-100, -50);
rect(0,0,50,50);
popMatrix();
最終的に 3D レンダラーに移行する可能性がある場合、これは 2D レンダラーで使用するのに適した方法です。これは、原点が 0,0 であると仮定してジオメトリを描画する独自のメソッドまたはオブジェクトを簡単に置き換えたり、作成rect()
したりできるためです。box()
sphere()
x 座標と y 座標を変数に置き換えるか、for ループで配列を反復処理すると、最小限の労力と最小限のコードの書き換えで、2 次元または 3 次元で数百または数千の形状を非常に簡単に描画できます。
更新:コメントに従って、元のポスターの説明を追加しました。
これにどのようにアプローチするかを示すために、問題を少し変更しました。プッシュ マトリックスとポップ マトリックスを使用して、上で説明した移動/回転の方法を示しています。私は値を推測しているだけですが、ピクセル精度が必要な場合は、フォトショップやプレビューなどの画像編集プログラムで測定できます.

translate(180, 150);
rect(0, 0, 180, 80);

translate(185, 170);
rotate(radians(65));
rect(0, 0, 180, 80);

translate(180, 250);
ellipse(0, 0, 8, 8);
pushMatrix()
とですべてをまとめpopMatrix()
ます。
void setup(){
size(400,400);
}
void draw(){
// rect1
noFill();
pushMatrix();
translate(180, 150);
rect(0, 0, 180, 80);
popMatrix();
// rect2
pushMatrix();
translate(185, 170);
rotate(radians(65));
rect(0, 0, 180, 80);
popMatrix();
// ellipse
fill(0);
pushMatrix();
translate(180, 250);
ellipse(0, 0, 8, 8);
popMatrix();
}