now still load shape array from math,
but with key [f] can load a csv file
make a subdir
/data/
inthere make a file irre.csv with this content:
0.00,-200.00
0.00,-200.67
0.00,-201.27
0.00,-201.82
0.00,-202.30
0.00,-202.73
0.00,-203.09
0.00,-203.39
0.00,-203.63
0.00,-203.81
0.00,-203.93
0.00,-203.99
0.00,-203.99
0.00,-203.93
0.00,-203.81
0.00,-203.63
0.00,-203.39
0.00,-203.09
0.00,-202.73
0.00,-202.31
0.00,-201.83
0.00,-201.29
0.00,-200.70
0.00,-200.05
0.00,-199.34
0.00,-198.58
0.00,-197.75
0.00,-196.88
0.00,-195.94
0.00,-194.95
0.00,-193.91
0.00,-192.81
0.00,-191.66
0.00,-190.46
0.00,-189.20
0.00,-187.89
0.00,-186.52
0.00,-185.11
0.00,-183.65
0.00,-182.13
0.00,-180.57
0.00,-178.96
0.00,-177.30
0.00,-175.59
0.00,-173.84
0.00,-172.04
0.00,-170.19
0.00,-168.30
0.00,-166.37
0.00,-164.39
0.00,-162.37
0.00,-160.31
0.00,-158.20
0.00,-156.06
0.00,-153.88
0.00,-151.66
0.00,-149.40
0.00,-147.10
0.00,-144.77
0.00,-142.40
0.00,-140.00
0.00,-137.57
0.00,-135.10
0.00,-132.60
0.00,-130.07
0.00,-127.51
0.00,-124.92
0.00,-122.30
0.00,-119.66
0.00,-116.99
0.00,-114.29
0.00,-111.57
0.00,-108.83
0.00,-106.06
0.00,-103.27
0.00,-100.46
0.00,-97.64
0.00,-94.79
0.00,-91.93
0.00,-89.05
0.00,-86.15
0.00,-83.24
0.00,-80.32
0.00,-77.38
0.00,-74.44
0.00,-71.48
0.00,-68.51
0.00,-65.54
0.00,-62.55
0.00,-59.56
0.00,-56.57
0.00,-53.57
0.00,-50.57
0.00,-47.56
0.00,-44.56
0.00,-41.55
0.00,-38.55
0.00,-35.54
0.00,-32.54
0.00,-29.55
0.00,-26.55
0.00,-23.57
0.00,-20.59
0.00,-17.62
0.00,-14.66
0.00,-11.70
0.00,-8.76
0.00,-5.83
0.00,-2.92
0.00,-0.02
0.00,2.87
0.00,5.74
0.00,8.60
0.00,11.44
0.00,14.25
0.00,17.05
0.00,19.83
0.00,22.59
0.00,25.32
0.00,28.03
0.00,30.72
0.00,33.38
0.00,36.01
0.00,38.62
0.00,41.20
0.00,43.75
0.00,46.28
0.00,48.77
0.00,51.23
0.00,53.66
0.00,56.05
0.00,58.41
0.00,60.74
0.00,63.03
0.00,65.29
0.00,67.51
0.00,69.69
0.00,71.84
0.00,73.94
0.00,76.01
0.00,78.03
0.00,80.02
0.00,81.96
0.00,83.86
0.00,85.72
0.00,87.53
0.00,89.30
0.00,91.03
0.00,92.71
0.00,94.34
0.00,95.93
0.00,97.47
0.00,98.97
0.00,100.41
0.00,101.81
0.00,103.16
0.00,104.46
0.00,105.71
0.00,106.91
0.00,108.06
0.00,109.15
0.00,110.20
0.00,111.20
0.00,112.14
0.00,113.03
0.00,113.87
0.00,114.66
0.00,115.39
0.00,116.07
0.00,116.69
0.00,117.27
0.00,117.78
0.00,118.25
0.00,118.66
0.00,119.01
0.00,119.32
0.00,119.56
0.00,119.75
0.00,119.89
0.00,119.97
0.00,120.00
0.00,119.97
0.00,119.89
0.00,119.75
0.00,119.56
0.00,119.32
0.00,119.01
0.00,118.66
0.00,118.25
0.00,117.78
0.00,117.27
0.00,116.69
0.00,116.07
0.00,115.39
0.00,114.66
0.00,113.87
0.00,113.03
0.00,112.14
0.00,111.20
0.00,110.20
0.00,109.15
0.00,108.06
0.00,106.91
0.00,105.71
0.00,104.46
0.00,103.16
0.00,101.81
0.00,100.41
0.00,98.97
0.00,97.47
0.00,95.93
0.00,94.34
0.00,92.71
0.00,91.03
0.00,89.30
0.00,87.53
0.00,85.72
0.00,83.86
0.00,81.96
0.00,80.02
0.00,78.03
0.00,76.01
0.00,73.94
0.00,71.84
0.00,69.69
0.00,67.51
0.00,65.29
0.00,63.04
0.00,60.74
0.00,58.42
0.00,56.05
0.00,53.66
0.00,51.23
0.00,48.77
0.00,46.28
0.00,43.75
0.00,41.20
0.00,38.62
0.00,36.01
0.00,33.38
0.00,30.72
0.00,28.03
0.00,25.32
0.00,22.59
0.00,19.83
0.00,17.05
0.00,14.25
0.00,11.44
0.00,8.60
0.00,5.74
0.00,2.87
0.00,-0.01
0.00,-2.92
0.00,-5.83
0.00,-8.76
0.00,-11.70
0.00,-14.66
0.00,-17.62
0.00,-20.59
0.00,-23.57
0.00,-26.55
0.00,-29.54
0.00,-32.54
0.00,-35.54
0.00,-38.55
0.00,-41.55
0.00,-44.56
0.00,-47.56
0.00,-50.57
0.00,-53.57
0.00,-56.57
0.00,-59.56
0.00,-62.55
0.00,-65.53
0.00,-68.51
0.00,-71.48
0.00,-74.44
0.00,-77.38
0.00,-80.32
0.00,-83.24
0.00,-86.15
0.00,-89.05
0.00,-91.93
0.00,-94.79
0.00,-97.64
0.00,-100.46
0.00,-103.27
0.00,-106.06
0.00,-108.83
0.00,-111.57
0.00,-114.29
0.00,-116.99
0.00,-119.66
0.00,-122.30
0.00,-124.92
0.00,-127.51
0.00,-130.07
0.00,-132.60
0.00,-135.10
0.00,-137.56
0.00,-140.00
0.00,-142.40
0.00,-144.77
0.00,-147.10
0.00,-149.40
0.00,-151.65
0.00,-153.88
0.00,-156.06
0.00,-158.20
0.00,-160.30
0.00,-162.37
0.00,-164.39
0.00,-166.36
0.00,-168.30
0.00,-170.19
0.00,-172.04
0.00,-173.84
0.00,-175.59
0.00,-177.30
0.00,-178.96
0.00,-180.57
0.00,-182.13
0.00,-183.65
0.00,-185.11
0.00,-186.52
0.00,-187.89
0.00,-189.20
0.00,-190.46
0.00,-191.66
0.00,-192.81
0.00,-193.91
0.00,-194.95
0.00,-195.94
0.00,-196.88
0.00,-197.75
0.00,-198.58
0.00,-199.34
0.00,-200.05
0.00,-200.70
0.00,-201.29
0.00,-201.83
0.00,-202.31
0.00,-202.73
0.00,-203.09
0.00,-203.39
0.00,-203.63
0.00,-203.81
0.00,-203.93
0.00,-203.99
0.00,-203.99
0.00,-203.93
0.00,-203.81
0.00,-203.63
0.00,-203.39
0.00,-203.09
0.00,-202.73
0.00,-202.30
0.00,-201.82
0.00,-201.27
0.00,-200.67
0.00,-200.00
0.00,-199.27
0.00,-198.48
0.00,-197.63
0.00,-196.72
0.00,-195.75
0.00,-194.72
0.00,-193.63
0.00,-192.47
0.00,-191.26
0.00,-189.99
0.00,-188.66
0.00,-187.27
0.00,-185.82
0.00,-184.31
0.00,-182.74
0.00,-181.12
0.00,-179.44
0.00,-177.70
0.00,-175.90
0.00,-174.05
0.00,-172.14
0.00,-170.17
0.00,-168.15
0.00,-166.08
0.00,-163.95
0.00,-161.76
0.00,-159.53
0.00,-157.24
0.00,-154.89
0.00,-152.50
0.00,-150.06
0.00,-147.56
0.00,-145.01
0.00,-142.42
0.00,-139.77
0.00,-137.08
0.00,-134.34
0.00,-131.56
0.00,-128.73
0.00,-125.85
0.00,-122.93
0.00,-119.96
0.00,-116.95
0.00,-113.90
0.00,-110.81
0.00,-107.67
0.00,-104.50
0.00,-101.29
0.00,-98.04
0.00,-94.75
0.00,-91.42
0.00,-88.06
0.00,-84.67
0.00,-81.24
0.00,-77.78
0.00,-74.28
0.00,-70.76
0.00,-67.20
0.00,-63.62
0.00,-60.00
0.00,-56.36
0.00,-52.69
0.00,-49.00
0.00,-45.28
0.00,-41.54
0.00,-37.78
0.00,-33.99
0.00,-30.19
0.00,-26.36
0.00,-22.52
0.00,-18.66
0.00,-14.78
0.00,-10.89
0.00,-6.98
0.00,-3.06
0.00,0.87
0.00,4.81
0.00,8.76
0.00,12.72
0.00,16.69
0.00,20.67
0.00,24.65
0.00,28.63
0.00,32.62
0.00,36.61
0.00,40.61
0.00,44.60
0.00,48.59
0.00,52.58
0.00,56.57
0.00,60.55
0.00,64.53
0.00,68.50
0.00,72.46
0.00,76.41
0.00,80.36
0.00,84.29
0.00,88.21
0.00,92.12
0.00,96.01
0.00,99.89
0.00,103.75
0.00,107.60
0.00,111.42
0.00,115.23
0.00,119.02
0.00,122.78
0.00,126.52
0.00,130.24
0.00,133.93
0.00,137.60
0.00,141.24
0.00,144.86
0.00,148.44
0.00,151.99
0.00,155.52
0.00,159.01
0.00,162.47
0.00,165.89
0.00,169.28
0.00,172.63
0.00,175.95
0.00,179.23
0.00,182.47
0.00,185.67
0.00,188.84
0.00,191.96
0.00,195.03
0.00,198.07
0.00,201.06
0.00,204.01
0.00,206.91
0.00,209.76
0.00,212.57
0.00,215.33
0.00,218.04
0.00,220.70
0.00,223.31
0.00,225.87
0.00,228.38
0.00,230.84
0.00,233.24
0.00,235.59
0.00,237.89
0.00,240.13
0.00,242.31
0.00,244.44
0.00,246.51
0.00,248.52
0.00,250.48
0.00,252.37
0.00,254.21
0.00,255.99
0.00,257.71
0.00,259.36
0.00,260.96
0.00,262.49
0.00,263.97
0.00,265.38
0.00,266.72
0.00,268.01
0.00,269.23
0.00,270.38
0.00,271.47
0.00,272.50
0.00,273.46
0.00,274.36
0.00,275.19
0.00,275.96
0.00,276.66
0.00,277.29
0.00,277.86
0.00,278.36
0.00,278.79
0.00,279.16
0.00,279.46
0.00,279.70
0.00,279.87
0.00,279.97
0.00,280.00
0.00,279.97
0.00,279.87
0.00,279.70
0.00,279.46
0.00,279.16
0.00,278.79
0.00,278.36
0.00,277.86
0.00,277.29
0.00,276.66
0.00,275.96
0.00,275.19
0.00,274.36
0.00,273.46
0.00,272.50
0.00,271.47
0.00,270.38
0.00,269.23
0.00,268.01
0.00,266.72
0.00,265.38
0.00,263.97
0.00,262.50
0.00,260.96
0.00,259.37
0.00,257.71
0.00,255.99
0.00,254.21
0.00,252.38
0.00,250.48
0.00,248.52
0.00,246.51
0.00,244.44
0.00,242.31
0.00,240.13
0.00,237.89
0.00,235.59
0.00,233.24
0.00,230.84
0.00,228.39
0.00,225.88
0.00,223.32
0.00,220.71
0.00,218.04
0.00,215.33
0.00,212.57
0.00,209.77
0.00,206.91
0.00,204.01
0.00,201.06
0.00,198.07
0.00,195.04
0.00,191.96
0.00,188.84
0.00,185.68
0.00,182.48
0.00,179.23
0.00,175.96
0.00,172.64
0.00,169.28
0.00,165.89
0.00,162.47
0.00,159.01
0.00,155.52
0.00,152.00
0.00,148.44
0.00,144.86
0.00,141.25
0.00,137.61
0.00,133.94
0.00,130.24
0.00,126.53
0.00,122.78
0.00,119.02
0.00,115.23
0.00,111.43
0.00,107.60
0.00,103.76
0.00,99.89
0.00,96.02
0.00,92.12
0.00,88.21
0.00,84.29
0.00,80.36
0.00,76.42
0.00,72.46
0.00,68.50
0.00,64.53
0.00,60.55
0.00,56.57
0.00,52.58
0.00,48.59
0.00,44.60
0.00,40.61
0.00,36.62
0.00,32.63
0.00,28.64
0.00,24.65
0.00,20.67
0.00,16.70
0.00,12.73
0.00,8.77
0.00,4.81
0.00,0.87
0.00,-3.06
0.00,-6.98
0.00,-10.89
0.00,-14.78
0.00,-18.66
0.00,-22.52
0.00,-26.36
0.00,-30.18
0.00,-33.99
0.00,-37.77
0.00,-41.54
0.00,-45.28
0.00,-49.00
0.00,-52.69
0.00,-56.36
0.00,-60.00
0.00,-63.61
0.00,-67.20
0.00,-70.75
0.00,-74.28
0.00,-77.77
0.00,-81.24
0.00,-84.67
0.00,-88.06
0.00,-91.42
0.00,-94.75
0.00,-98.03
0.00,-101.29
0.00,-104.50
0.00,-107.67
0.00,-110.80
0.00,-113.90
0.00,-116.95
0.00,-119.96
0.00,-122.92
0.00,-125.85
0.00,-128.72
0.00,-131.56
0.00,-134.34
0.00,-137.08
0.00,-139.77
0.00,-142.42
0.00,-145.01
0.00,-147.56
0.00,-150.05
0.00,-152.50
0.00,-154.89
0.00,-157.23
0.00,-159.52
0.00,-161.76
0.00,-163.95
0.00,-166.07
0.00,-168.15
0.00,-170.17
0.00,-172.14
0.00,-174.05
0.00,-175.90
0.00,-177.70
0.00,-179.44
0.00,-181.12
0.00,-182.74
0.00,-184.31
0.00,-185.82
0.00,-187.27
0.00,-188.66
0.00,-189.99
0.00,-191.26
0.00,-192.47
0.00,-193.62
0.00,-194.72
0.00,-195.75
0.00,-196.72
0.00,-197.63
0.00,-198.48
0.00,-199.27
so you start with my fourier math shape and on press [f]
to load a new CSV file shape
that file content you now can design by excel… to any shape you want
on my blog can also now download the complete set ( incl the excel file )
and still have the math shape way
? what was the way to make a triangle wave?
rectangle was:
a*sin(f) + b*sin(3f)+ c*sin(5f)...
ok found it:
a*sin(f) - b*sin(2f) + c*sin(3f)
i found that there are small shades inbetween r values so i allow a fine adjust:
mouseWheel ( r ± 0.1 ) mouseWheel pressed (r ±0.01 )
// http://www.math.com/students/wonders/spirographs.html
// https://discourse.processing.org/t/how-do-i-create-regular-spirograph-curves-around-an-asymmetrical-shape/5501/11?u=kll
// v0.2 use RAH theme and irre[0 .. 359] filled by math
// v0.3 change to mouse click XY
// adjustable buffer for array and spiral loop now 360 to 720
// use curveVertex but not sure the show is better
// change r to float and mouseWheel to very small steps
// v0.4 https://discourse.processing.org/t/how-do-i-create-regular-spirograph-curves-around-an-asymmetrical-shape/5501/10?u=kll
// add load csv file as string, 720 lines with 0.0,0.0, on key [f] press
// make fine adjust of "r" bei mouse (wheel) pressed ( change by 0.01 only)
// v0.5 key [r] start record [p] print save display to /data/spiro.svg !! [r] selects datetime filename / no overwrite warning
// theme selector key [1] RAH [2] KLL
// key [q] select fill math shape with rect or triangle online
// key [h] helptext
import processing.svg.*;
boolean SVGfile = false;
int buffer = 720;
String irrefile = "irre.csv"; // see /data/irre.csv
String svgfile="";
String[] coordinates;
int d=5, R=50, O=100;
float r=1;
float oldx, oldy, x=0, y=0, t;
boolean dbug = false;
int theme = 1; // 1 = RAH, 2 = KLL
PVector[] irre = new PVector[buffer];
boolean shaperect = true;
void make_irre_array() {
for (int i = 0; i < buffer; i++)
irre[i] = new PVector();
}
void make_irre_shape() { // by math
float a = 0, b=100;
float w = TWO_PI/buffer;
for (int i = 0; i < buffer; i++) {
// irre[i] = new PVector();
irre[i].x = a*sin(i*w);
if (shaperect) irre[i].y = b*sin(1*i*w)+1.5*b*sin(3*i*w)+0.4*b*sin(5*i*w); // add sinus harmonics to make a rectangle (fourier)
else irre[i].y = b*sin(1*i*w)-2*b*sin(2*i*w)+0.3*b*sin(3*i*w); // add sinus harmonics to make a triangle (fourier)
if (dbug) println(" i "+i+" irre "+irre[i]);
}
}
void load_irre_shape() { // array exists already , so we just overwrite it
println(" load shape from file"+irrefile);
coordinates = loadStrings(irrefile); // also could use loadtable
if (dbug) println("Loaded " + coordinates.length + " coordinates:");
for (int i = 0; i < coordinates.length; i++) {
String[] ordinate = splitTokens(coordinates[i], ",");
irre[i].x = float(ordinate[0]);
irre[i].y = float(ordinate[1]);
if (dbug) println(i, ": ", String.format("%.5f %.5f", irre[i].x, irre[i].y));
}
}
void helptext() {
println("use mouseX (R) mouseY (O) (now must click) ");
println("and mouseWheel (r +-0.1) fine adjust mouseWheel pressed(r +-0.01");
println("use key [q] can select between two math shapes");
println("use key [f] to load shape from file: /data/irre.csv");
println("use key[r] record & key[p] print to save to /data/spiro.svg");
println("use key[1] for black on white [2] blue on yellow");
println("use key[h] for this text");
}
void setup() {
size(600, 600);
make_irre_array();
make_irre_shape(); // now can later select with key[q]
helptext();
}
void set_theme() {
if (theme == 1) { // RAH theme
background(255);
stroke(0);
strokeWeight(1.5);
noFill();
} else if (theme == 2) { // KLL theme
background(200, 200, 0);
stroke(0, 0, 200);
strokeWeight(5);
fill(200, 200, 0);
}
}
void draw() {
set_theme();
translate(width/2, height/2);
scale(0.2);
beginShape();
for ( int i=0; i<buffer; i++) {
t = TWO_PI * i/buffer;
//oldx=x;
//oldy=y;
// x = irre[i].x + (x/50+y/50000)*(R+r)*cos(t) - (r+O)*cos(((R+r)/r)*t); // RAH TWIST
x = irre[i].x + (R+r)*cos(t) - (r+O)*cos(((R+r)/r)*t); // default
y = irre[i].y + (R+r)*sin(t) - (r+O)*sin(((R+r)/r)*t);
// draw options:
//ellipse(x, y, d, d);
//line(oldx, oldy, x, y);
curveVertex(x, y); // try this, but i still like the line more!
}
endShape(CLOSE);
}
void mouseReleased() { //kll now must click mouse to change R and O
if ( mouseButton == LEFT ) {
R=mouseX;
O=mouseY;
println("r: "+nf(r, 1, 2)+" R: "+R+" O: "+O);
}
}
void mouseWheel(MouseEvent event) {
if ( mousePressed ) {
r += event.getCount()/100.0;
} else {
r += event.getCount()/10.0;
if ( r == 0 ) r = 1;
}
println("r: "+nf(r, 1, 2)+" R: "+R+" O: "+O);
}
void keyReleased() {
if ( key == 'f' ) load_irre_shape(); // load file /data/irre.svg
if ( key == 'r' ) { // start recording drawings
SVGfile = true;
svgfile= "data/spiro_"+year()+month()+day()+"_"+hour()+minute()+second()+".svg";
beginRecord(SVG, svgfile);
println(" start recording ");
}
if ( key == 'p' ) { // save recording to /data/spiro_yyyymmdd_hhmmss.svg ( time from pressing key[r] )
if ( SVGfile ) endRecord();
println(" save recording "+svgfile);
}
if ( key == '1' ) theme = 1;
if ( key == '2' ) theme = 2;
if ( key == 'q' ) {
shaperect = !shaperect;
make_irre_shape();
}
if ( key == 'h' ) helptext();
}