// radii of torus for torus knot R1=20; R2=8; R3=15; //torus knot parameters p=2; q=3; N_seg=241; //n segments nn=80; // number skipped by spokes B=1.5; // strip width d=0.15; // thickness parameter //points punten = [ for (i=[0:N_seg+2])[ R2*cos(i*(q-p)*360/N_seg)-R1*cos(i*p*360/N_seg), R2*sin(i*(q-p)*360/N_seg)+R1*sin(i*p*360/N_seg), -R3*sin(i*q*360/N_seg) ]]; //*/ //velocities snelh = [ for (i=[0:N_seg+1])[ punten[i+1][0]-punten[i][0], punten[i+1][1]-punten[i][1], punten[i+1][2]-punten[i][2] ]]; //index 0 of snelh refers to index(0) of punten //accelleration versnel = [ for (i=[1:N_seg+1])[ punten[i+1][0]+punten[i-1][0]-2*punten[i][0], punten[i+1][1]+punten[i-1][1]-2*punten[i][1], punten[i+1][2]+punten[i-1][2]-2*punten[i][2] ]]; // index 0 of versnel refers to index(1) of punten // accXvelocity is strip width vector dwars = [ for (i=[0:N_seg])[ versnel[i][1]*snelh[i][2]-versnel[i][2]*snelh[i][1], versnel[i][2]*snelh[i][0]-versnel[i][0]*snelh[i][2], versnel[i][0]*snelh[i][1]-versnel[i][1]*snelh[i][0] ]]; // Ndwars = [ for (i=[0:N_seg]) pow( dwars[i][0]*dwars[i][0] +dwars[i][1]*dwars[i][1] +dwars[i][2]*dwars[i][2] ,1/2) ]; // NNdwars = [ for (i=[0:N_seg])[ dwars[i][0]/Ndwars[i], dwars[i][1]/Ndwars[i], dwars[i][2]/Ndwars[i] ]]; // for (i=[1:N_seg+0]){ hull(){ // The [i-1] is because the array is defined from 0, using point indeices starting from 1. translate(punten[i]+B*NNdwars[i-1]/2) sphere(d); translate(punten[i]-B*NNdwars[i-1]/2) sphere(d); translate(punten[i+1]+B*NNdwars[i-1]/2) sphere(d); translate(punten[i+1]-B*NNdwars[i-1]/2) sphere(d); } translate(punten[i]) color("red") sphere(3*d); } m=(N_seg-0); color([0.5,0,0.5]) spokes(); module spokes(){ for (i=[1:N_seg-1]){ hull(){ translate(punten[i]) sphere(d); translate(punten[(i+nn) - m*floor((i+nn)/m)]) sphere(d); } } }