Mod:Coding Challenge #23: 2D Supershapes
これの続き。
パラメーターが6つあるので、コントローラーをControlP5を使って制御してみた。
コード
import controlP5.*; float n1; float n2; float n3; float m; float a; float b; float radius = 200; ControlP5 cp5; // setup関数 : 初回1度だけ実行される void setup() { size(960, 540); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100); // HSBでの色指定にする cp5 = new ControlP5(this); cp5.setColorCaptionLabel(color(0, 0, 0)); cp5.addSlider("n1").setPosition(20, 20).setRange(0, 5).setValue(0.3); cp5.addSlider("n2").setPosition(20, 40).setRange(0, 5).setValue(0.3); cp5.addSlider("n3").setPosition(20, 60).setRange(0, 5).setValue(0.3); cp5.addSlider("m").setPosition(20, 80).setRange(0, 10).setValue(5); cp5.addSlider("a").setPosition(20, 100).setRange(0, 5).setValue(1); cp5.addSlider("b").setPosition(20, 120).setRange(0, 5).setValue(1); } // draw関数 : setup関数実行後繰り返し実行される void draw() { background(0, 0, 50); pushMatrix(); translate(width/2, height/2); rotate(frameCount*0.01); stroke(frameCount%360, 80, 100); noFill(); beginShape(); for (float angle = 0; angle < 360; angle += 0.1) { float theta = radians(angle); float r = superShape(theta); float x = radius * r * cos(theta); float y = radius * r * sin(theta); vertex(x, y); } endShape(); popMatrix(); } float superShape(float theta) { float part1 = (1 / a) * cos(theta * m / 4); part1 = abs(part1); part1 = pow(part1, n2); float part2 = (1 / b) * sin(theta * m / 4); part2 = abs(part2); part2 = pow(part2, n3); float part3 = pow(part1 + part2, 1 / n1); if (part3 == 0) { return 0; } return (1 / part3); }