【Processing】リサージュ曲線を描画に使う(3)〜ellipse2()をならべてみた〜
続き。
#Processing pic.twitter.com/Um3Vt98q1m
— 94 (@_94_94) November 26, 2018
せっかく関数を作ったので、使ってみた。
とりあえずならべてみた。
縦横比を調整できるようにしたけどその機能は使わなかった。
二重のfor文で、XとYのリサージュ曲線の係数に使う。
列と行でリサージュ曲線がどうなるか見れる。
void setup() { size(800, 800); background(250); frameRate(1); } void draw() { background(250); int grid = (int)(frameCount)*2; int disX =(width/(grid*2)); int disY =(height/(grid*2)); for (int i = 0; i < grid; i++) { for (int j = 0; j < grid; j++) { color strokeColor = color(250); color fillColor = color(100, random(250), 230, random(10,30)); ellipse2((disX + 2*disX*i), (disY + 2*disY*j), (disX)-1/grid, (disY)-1/grid, i *2, j * 2, strokeColor, fillColor); } } } //リサージュ設定付きのellipse()------- void ellipse2(float x, float y, float radiusX, float radiusY, 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 = radiusX*cos(radians(degree*risaX)); ry = radiusY*sin(radians(degree*risaY)); prx = radiusX*cos(radians((-1 + degree)*risaX)); pry = radiusY*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 = radiusX*cos(radians(degree*risaX)); ry = radiusY*sin(radians(degree*risaY)); prx = radiusX*cos(radians((-1 + degree)*risaX)); pry = radiusY*sin(radians((-1+ degree)*risaY)); noFill(); strokeWeight(1); stroke(st); line(prx, pry, rx, ry); } popMatrix(); save("save/" + frameCount + ".jpg"); }