[ignore warning ] use sliders to change parameters press 's' key to save
xxxxxxxxxx
/*/////////////////////////////////////////////
// Code by Unknowable //
// unknowableart.github.io //
// //
// Original code link: //
// https://openprocessing.org/sketch/1232396 //
/////////////////////////////////////////////*/
/*---------------------------------------------
About this sketch
Example use of SuperFormula and p5.SVG
----------------------------------------------*/
var sscale = 25;
var openprocessing = true
function setup() {
createCanvas(windowWidth, windowHeight, SVG);
//createCanvas(1000, 1000, SVG);
background(100);
smooth();
noFill();
stroke(0);
if(openprocessing){
//OPC.slider(variableName, defaultValue, [min], [max], [step]);
OPC.slider('a', 1, 0.1, 20, 0.1);
OPC.slider('b', 1, 0.1, 20, 0.1);
OPC.slider('m', 0, 20, 0, 0.1);
OPC.slider('n1', 1, 0.1, 80 , 0.1);
OPC.slider('n2', 1, 0.1, 80 , 0.1);
OPC.slider('n3', 1, 0.1, 80 , 0.1);
}
else{
//createSlider( min, max, value, step )
var a,b,m,n1,n2,n3;
ASlider = createSlider(0.1, 20, 1, 0.1);
ASlider.position(30, 40);
BSlider = createSlider(0.1, 20, 1, 0.1);
BSlider.position(30, 70);
MSlider = createSlider(0, 20, 0, 0.1);
MSlider.position(30, 100);
N1Slider = createSlider(0.1, 80, 1, 0.1);
N1Slider.position(30, 130);
N2Slider = createSlider(0.1, 80, 1, 0.01);
N2Slider.position(30, 160);
N3Slider = createSlider(0.1, 80, 1, 0.01);
N3Slider.position(30, 190);
}
}
function draw() {
if(!openprocessing){
a = ASlider.value();
b = BSlider.value();
m = MSlider.value();
n1 = N1Slider.value();
n2 = N2Slider.value();
n3 = N3Slider.value();
}
//print("\n A="+str(a)+"\n B="+str(b)+"\n M="+str(m)+"\n N1="+str(n1)+"\n N2="+str(n2)+"\n N3="+str(n3));
clear();
background(255);
points = superformula(a,b,m, n1, n2, n3);
push();
translate(width/2, height/2);
for(let i=1;i<10;++i){
let aux = i*0.9;
get_shape(points,sscale*aux);
}
pop();
}
function keyTyped() {
if (key == 's' || key == 'S') save(str(random(0,1000))+".svg");
}
function get_shape(points, sscale){
beginShape();
vertex(points[points.length-1].x * sscale, points[points.length-1].y * sscale);
for (let i = 0;i < points.length; i++) {
vertex(points[i].x * sscale, points[i].y * sscale);
}
vertex(points[0].x * sscale, points[0].y * sscale);
endShape();
}
function superformula( a, b, m, n1, n2, n3) {
let numPoints = 360;
let phi = TWO_PI / numPoints;
points = [];
for (let i = 0;i <= numPoints;i++) {
points[i] = r(a,b,m,n1,n2,n3,phi * i);
}
return points;
}
function r( a, b, m, n1, n2, n3, phi) {
var r;
var t1,t2;
var x = 0;
var y = 0;
t1 = cos(m * phi / 4) / a;
t1 = abs(t1);
t1 = pow(t1,n2);
t2 = sin(m * phi / 4) / b;
t2 = abs(t2);
t2 = pow(t2,n3);
r = pow(t1+t2,1/n1);
if (abs(r) == 0) {
x = 0;
y = 0;
}
else {
r = 1 / r;
x = r * cos(phi);
y = r * sin(phi);
}
return createVector(x, y);
}