【Processing】リサージュ曲線を描画に使う(2)〜ellipse2()をつくる〜
#Processing pic.twitter.com/2C3s8fIkgC
— 94 (@_94_94) November 24, 2018
ここ最近、三角関数とコードについて考えることがあった。
リサージュ曲線を見てると、やっぱり数値の振る舞いはきれいだよな〜と思う。
ところで、リサージュ曲線を書きたいとき、いちいち計算しないといけないのがめんどくさくて、
ellipse()で設定できたら楽なのにな〜〜〜と思った。
なので関数を作った。けっこうめんどくさかったが、できてよかった。
で、作ってどうするの?ってのが問題。
使わない道具は存在する意味がないので、どうにか使いみちを考えてみる。
だれかつかってみてほしい。
void setup() { size(800, 500); background(250); frameRate(3); } void draw() { background(250); int grid = (int)((random(30)+1)); float disX =(width/(grid*2)); float disY =(height/(grid*2)); for (int i = 0; i < grid+1; i++) { for (int j = 0; j < grid+1; j++) { color strokeColor = color(155); color fillColor = color(random(250), 0, 200, random(80)); //引数は(座標x,座標y,半径、リサージュ図形のための係数X,リサージュ図形のための係数Y,先の配色、塗の配色); ellipse2(disX + 2*disX*i, disY + 2*disY*j, ((disX+ disY)/2)-1, (int)random(5), (int)random(5), strokeColor, fillColor); } } } //リサージュ設定付きのellipse()------- void ellipse2(float x, float y, float radius, int risaX, int risaY, color st, color fi) { int degree = 0; float rx, ry; float prx, pry ; if (risaX%2 == 0) { risaX++; } //奇数にする if (risaY%2 == 0) { risaY++; } //奇数にする pushMatrix(); translate(x, y); for (int i = 0; i < 360; i++) { degree = i; rx = radius*cos(radians(degree*risaX)); ry = radius*sin(radians(degree*risaY)); prx = radius*cos(radians((-1 + degree)*risaX)); pry = radius*sin(radians((-1+ degree)*risaY)); noStroke(); fill(fi); beginShape(); if ( risaX <= risaY ) { vertex(0, 0); vertex(prx, 0); vertex(prx, pry); vertex(rx, ry); vertex(rx, 0); vertex(0, 0); } else { vertex(0, 0); vertex(0, pry); vertex(prx, pry); vertex(rx, ry); vertex(0, ry); vertex(0, 0); } endShape(CLOSE); } for (int i = 0; i < 360; i++) { degree = i; rx = radius*cos(radians(degree*risaX)); ry = radius*sin(radians(degree*risaY)); prx = radius*cos(radians((-1 + degree)*risaX)); pry = radius*sin(radians((-1+ degree)*risaY)); noFill(); strokeWeight(0.5); stroke(st); line(prx, pry, rx, ry); } popMatrix(); save("save/" + frameCount + ".jpg"); }