3D Turtle Graph
以前、3D版タートルグラフを扱うツールを以下でテストしました。
「Beetle Blocks」
今回はProcessingのプログラムとして実現できるものをテストしたいと思います。
https://github.com/Kango/3D-Turtle
(ライブラリも含めて提供されているため以下はメイン部分のみ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import peasy.*; PeasyCam camera; Turtle t; void setup() { size(1300, 800, P3D); t = new Turtle(); camera = new PeasyCam(this, 25, 25, -25, 100); } void draw() { background(0); avoidClipping(); lights(); pushMatrix(); t.setColor(color(255, 255, 0)); t.forward(20); t.right(90); t.forward(20); t.left(90); t.forward(20); t.noseUp(90); t.forward(20); t.noseDown(90); t.forward(20); t.right(90); t.forward(20); t.rollRight(45); t.forward(20); t.right(90); t.forward(20); t.showTurtle(); popMatrix(); } |
上のプログラムを走らせと下のように描画されます。
プログラムを一行ずつみながら結果を見ていくと、それぞれの関数の意味がわかると思います。
前進->右折->前進->左折-> ・・・
t.rollRigh(45)のrollとは傾けることで、45度右に進行方向を軸に回転します。これ以降は傾いた状態が基準になります。
以下は動きの部分のみを変えたサンプルです。
1 2 3 4 5 6 |
t.setColor(color(0, 255, 255)); for(int i=0; i<20 ;i++){ t.forward(100); t.right(150); t.rollRight(-20); } |
1 2 3 4 5 6 |
t.setColor(color(255, 0, 0)); for(int i=0; i<120 ;i++){ t.forward(i/2); t.right(20); t.rollRight(-1); } |
Lキーを押すと軌跡の部分が立体でなく線になります。
PeasyCamライブラリのおかげで、マウスによる拡大縮小や見る角度をリアルタイムに変えられます。
Processingのプログラムなので拡張性は言うまでもなく、他のプログラムとの連携がかなり便利です。
Category: 3D