ZawaWorks’s diary

プログラミング技術メモ

Processing: 正弦波を使ったおもしろ図形(おにぎり、花、金平糖、その他)

はじめに

Processingで正弦波を使って様々な図形を作ってみました。すべて同じ関数の変数をいじるだけで作成できます。

使う関数

今回使う関数はwave_circle()という自作の関数です。この関数は元々ジグザグした円を作るために作成しました。

wave_circle()

void setup() {
  size(600, 600);
  fill(-1);
  wave_circle(width/2, height/2, 100, 10, 10);
}

//posX,posY: 座標, r: 半径, wavelength: 波長(波の幅), amplitude: 振幅(波の高さ)
void wave_circle(float posX, float posY, float r, float wavelength, float  amplitude) {
  pushMatrix();
  translate(posX, posY);

  beginShape();
  for (float i=0; i <= 2*PI; i += PI/180) {
    float x = cos(i)*( r + amplitude*sin(i*wavelength) );
    float y = sin(i)*( r + amplitude*sin(i*wavelength) );

    vertex(x, y);
  }
  endShape();

  popMatrix();
}

出力結果

f:id:ZawaWorks:20180509233417p:plain 上の図のように金平糖のようなジグザグした図形を作ることができます。これで目的は達成したのですが、変数をいじってみたら様々な形に変わることが分かりました。

図形一覧

ここからはどのような変数を入れるといかなる図形になるの一覧にしました。

金平糖

wavelength = 10 , amplitude = r/10 f:id:ZawaWorks:20180509233417p:plain

ミートボール

wavelength = 20, amplitude = r/100 f:id:ZawaWorks:20180509234412p:plain

ウニ

wavelength = 100, amplitude = r/10 f:id:ZawaWorks:20180509235117p:plain

おにぎり(角丸多角形)

wavelength = 3, amplitude = r/10wavelength = n のとき角丸のn角形になります) f:id:ZawaWorks:20180509235657p:plain

花びら

wavelength > 2, amplitude = r (図はwavelength = 5のとき) f:id:ZawaWorks:20180509235912p:plain

ヒトデ、星

wavelength = 5, amplitude = (3*r) / 10 f:id:ZawaWorks:20180510000204p:plain

作品事例

この関数を使って作ってみた作品です。

おわりに

なんとなく作ってみた関数でいろいろな図形を描くことができたことに驚きました。なんとなく入れた数字で想像してなかった図形に巡り合えることが興味深かったです。もしかしたら僕も発見してない図形があるかもしれないので試してみると面白いかもしれません。