Processingやってみた

Processingとは

  • Javaベースのプログラミング環境
  • Javaベースだけどクラス原理主義じゃない簡単な言語
  • ArduinoにそっくりなシンプルなIDE (というか、Processingのほうが先)
  • グラフィックの描画が得意

Processingの良さ (※個人の感想です)

  • 余計なしきたりとか覚えることが少なくて、書きたいことだけ書ける。
  • キャンバスって何よ? コンテキストって何よ? みたいな本質的でない知識が不要。
  • 基本的な機能だけならimportも不要。ライブラリはメニューからimportできる。
  • 三角関数がMath.cos(theta)みたいにならず、ふつうにcos(theta)と書ける。

コッホ曲線のスケッチ

コッホ曲線を描画するスケッチを書いてみた。
Processingはじめて1時間くらいで書けた。楽しい。

void koch(float x1, float y1, float x2, float y2, int n)
{
    float x3 = (2*x1 + x2)/3.0;
    float y3 = (2*y1 + y2)/3.0;

    float x4 = (x1 + 2*x2)/3.0;
    float y4 = (y1 + 2*y2)/3.0;
    
    float x = (x2 - x1) / sqrt(3);
    float y = (y2 - y1) / sqrt(3);
    float theta = radians(-30);
    float x5 = x1 + x*cos(theta) - y*sin(theta);
    float y5 = y1 + x*sin(theta) + y*cos(theta);
    
    n--;
    if(n<=0){
        line(x1, y1, x3, y3);
        line(x3, y3, x5, y5);
        line(x5, y5, x4, y4);
        line(x4, y4, x2, y2);
    }else{
        koch(x1, y1, x3, y3, n);
        koch(x3, y3, x5, y5, n);
        koch(x5, y5, x4, y4, n);
        koch(x4, y4, x2, y2, n);
    }
}

void setup()
{
    size(640, 480);
    translate(320, 240);
    background(255);
    stroke(0,0,255);
    strokeWeight(1);
    smooth();
    
    float R = 200;
    float[] x = new float[3];
    float[] y = new float[3];
    for(int i=0;i<3;i++){
        x[i] = R*cos(radians(120*i));
        y[i] = R*sin(radians(120*i));  
    }
    
    koch(x[0], y[0], x[1], y[1], 5);
    koch(x[1], y[1], x[2], y[2], 5);
    koch(x[2], y[2], x[0], y[0], 5);
}

void draw()
{
}

実行結果

f:id:licheng:20181101212243p:plain