【Processing】コードで木を描く

この記事を書いたチーム:frontier
【Processing】コードで木を描く 株式会社Smallit 技術ブログ

はじめに 

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

この記事ではProcessingで木を描く方法をご紹介します。実際に作成された画像はこちらになります。パラメータを変えて実行することでさまざまな木を描くことができます。 

   

   

Processingとは 

Processingはビジュアルプログラミングのためのオープンソースの開発環境です。言語はJavaをベースとしていますが、シンプルな構造でJavaの知識がなくても直感的にコードを書くことができます。また、Pythonモード(Python Mode for Processing)やWebブラウザ上で動かせるJavaScriptライブラリ(p5.js)も存在します。 

IDEについて 

公式サイトからIDEをダウンロードできます。リアルタイムにコードがチェックされ、エラー内容はコンソールに出力されます。 

 木の描画処理の流れ 

今回は再帰処理を用いて木の描画処理を実装します。大まかな処理の流れは下記のようになります。(サンプルコードは記事の最後にあります) 

 

枝描画処理(N回) 

枝描画 

②N>0のとき③~④の処理を行う 

右側の枝描画処理(N-1回)呼び出し 

左側の枝描画処理(N-1回)呼び出し 

 

関数の説明 

コード内で使用されている関数をいくつかご紹介します。詳細は公式リファレンスをご参照ください。 

  • setup():
    初期設定を行う関数。プログラム開始時に呼び出される。
     
  • settings()
    ほとんどのプログラムでは必要ないが、
    size()のパラメータに変数を指定したい場合などに使用される。 
  • draw():
    描画処理を行う関数。setup()の直後に呼び出され、プログラムが停止されるかnoLoop()が呼び出されるまで繰り返し実行される。 

  • redraw():
    draw()内のコードを1回実行
    する。 
  • translate(float x, float y):
    指定された移動量だけオブジェクトを移動する。 
  • rotate(float angle)
    指定された角度(ラジアン)だけ原点を中心にオブジェクトを回転する。
     

  • pushMatrix(), popMatrix():
    translate()やrotate()による変換は後続の処理にも影響するため、変換の範囲を制限したい場合にこれらの関数を用いる。現在の変換行列を保存する場合はpushMatrix()を使用し、復元する場合はpopMatrix()を使用する。 
  • random(float high):
    [0, high)
    の範囲で乱数を生成する。 
  • random(float low, float high):
    [low, high) の範囲で乱数を生成する。 

 

サンプルコード 

画面クリックで再描画、Sキー押下で画像の保存ができるようになっています。パラメータを変えて色々試してみてください。 

 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス