関数名とか忘れやすいのでコード補完が無いのはイラッとくるけど、Processingに慣れてきたのでサイクロイドでも描いてみようと思う。
パラメトリック方程式とかサイクロイドとかはWikipedia参照。
パラメトリック方程式
サイクロイド
「変数tを導入してバラバラにするやつ」はパラメトリック方程式という名前だったんですね。
今知りました。
/*初期化のパラメータ ww,wh:画面の幅、高さ hww,hwh:画面の幅、高さの半分のサイズ */ final int ww = 640; final int wh = 480; final int hww = ww/2; final int hwh = wh/2; /*サイクロイドのパラメータ r:半径 st:刻む時間の大きさ maxt:最大の角度 */ final float r = 150; final float dt = 0.01; final float maxt = 2*PI; /*変数 x,y:座標(x,y) nx,ny:次の座標(x,y) t:角度 */ float x, nx, y, ny, tmpx, tmpy; float t = 0; //初期化 void setup() { size(ww,wh); background(255); strokeWeight(2); //線の太さ //初期位置の設定 pmf(); x = tmpx; y = tmpy; } //描画 void draw() { //角度を進める t += dt; //次の座標の計算 pmf(); nx = tmpx; ny = tmpy; //直線を引く line(x+hww,y+hwh,nx+hww,ny+hwh); //座標の更新 x = nx; y = ny; //最大角度を越えればループを止める if(t >= maxt) noLoop(); } //パラメトリック方程式の計算 void pmf() { tmpx = r * cos(t); tmpy = r * sin(t); }
これで円を描画できる。
何かpmf()関数が変なことになってるけど、参照渡しのやりかたが分からなかったためにこんな事になってる。
ホントにどうやるんだろう、参照渡し。
さっそくサイクロイドを作ってみた。
変更したのはmaxtを2*PI*2にしたことと、式。
//パラメトリック方程式の計算 void pmf() { tmpx = r * (t-sin(t)); tmpy = r * (1-cos(t)); }
上下逆になってるし、二つあるせいで尻に見えるけど、確かにサイクロイド。