xxxxxxxxxx
148
let phi;
let aparam;
let kparam;
let bparam;
let twists;
let samples;
// extra things
let offset;
let slider1;
let slider2;
let test =0;
function setup() {
createCanvas(500, 500,WEBGL);
phi = (1 + sqrt(5)) / 2; // calculate golden mean
aparam = createSlider(1,100,100);
kparam = createSlider(1,100,10);
bparam = createSlider(1,100,10);
twists = createSlider(1,10,1);
samples = createSlider(3,1000,10);
offset = createSlider(0,100,0);
slider1 = createSlider(0,200,0);
slider2 = createSlider(0,200,0);
}
function draw() {
background(220);
rotate(mouseX);
orbitControl();
let t = twists.value();
let s = samples.value();
let a = aparam.value();
let b = - bparam.value();
let k = kparam.value()/100;
fill(237, 34, 93);
noStroke();
beginShape(TRIANGLES);
print(a);
let helixstep = TWO_PI/s;
for(let i = 0; i <= TWO_PI * t; i += helixstep)
{
a = aparam.value();
//fill(map(i,-TWO_PI * 2,TWO_PI*t,255,0));
// top corner
let x = a * exp(k*i)*cos(i);
let y = a * exp(k*i)*sin(i);
let z = b * i;
let c1 = createVector(x,y,z);
// bottom corner
j = i - TWO_PI;
x = a * exp(k*j)*cos(j);
y = a * exp(k*j)*sin(j);
z = b * j;
let c2 = createVector(x,y,z);
// next top corner
j = i + helixstep;
x = a * exp(k*j)*cos(j);
y = a * exp(k*j)*sin(j);
z = b * j;
let c3 = createVector(x,y,z);
// next bottom corner
j = i + helixstep - TWO_PI;
x = a * exp(k*j)*cos(j);
y = a * exp(k*j)*sin(j);
z = b * j;
let c4 = createVector(x,y,z);
// subdivision between low and high helix (n)
let circleCenter = createVector((c1.x+c2.x)/2,(c1.y+c2.y)/2,(c1.z+c2.z)/2)
let circleRadius = c1.dist(c2)/2;
// subdivision between low and high helix (n + 1)
let circleCenterNext = createVector((c3.x+c4.x)/2,(c3.y+c4.y)/2,(c3.z+c4.z)/2);
let circleRadiusNext = c3.dist(c4)/2;
let circleSampling = 20;
let step = TWO_PI/circleSampling;
for(h=0; h<TWO_PI;h+=TWO_PI/circleSampling)
{
fill(map(i,-TWO_PI * 2,TWO_PI*t,0,255),map(h,0,TWO_PI,255,0),0);
// 1st point 1st circle
let cx = circleRadius*cos(h)*cos(i)+circleCenter.x;
let cy = circleRadius*sin(h+HALF_PI)*sin(i)+circleCenter.y;
let cz = circleRadius*sin(h)+circleCenter.z;
let p1c1 = createVector(cx, cy, cz);
// 2nd point 1st circle
cx = circleRadius*cos(h+step)*cos(i)+circleCenter.x;
cy = circleRadius*sin(h+HALF_PI+step)*sin(i)+circleCenter.y;
cz = circleRadius*sin(h+step)+circleCenter.z;
let p2c1 = createVector(cx, cy, cz);
// 1st point 2nd circle
cx = circleRadiusNext*cos(h)*cos(i+helixstep)+circleCenterNext.x;
cy = circleRadiusNext*sin(h+HALF_PI)*sin(i+helixstep)+circleCenterNext.y;
cz = circleRadiusNext*sin(h)+circleCenterNext.z;
let p1c2 = createVector(cx, cy, cz);
// 2nd point 2nd circle
cx = circleRadiusNext*cos(h+step)*cos(i+helixstep)+circleCenterNext.x;
cy = circleRadiusNext*sin(h+HALF_PI+step)*sin(i+helixstep)+circleCenterNext.y;
cz = circleRadiusNext*sin(h+step)+circleCenterNext.z;
let p2c2 = createVector(cx, cy, cz);
// first triangle
vertex(p1c2.x,p1c2.y,p1c2.z);
vertex(p2c1.x,p2c1.y,p2c1.z);
vertex(p1c1.x,p1c1.y,p1c1.z);
// second triangle
vertex(p2c2.x,p2c2.y,p2c2.z);
vertex(p2c1.x,p2c1.y,p2c1.z);
vertex(p1c2.x,p1c2.y,p1c2.z);
}
}
endShape();
}