note: these are the UserView:animate versions (available in recent osx version of supercollider only)
see http://swiki.hfbk-hamburg.de:8888/MusicTechnology/875 if you use swingosc (linux/win).
Processing-Book-001 / Illustrations
//updated 100228 to use UserView:animate
(
var w= Window("processing - page_022", Rect(100, 100, 713, 938), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var ydiv, s, x;
u.background= Color.white;
ydiv= u.bounds.height/54;
u.drawFunc= {
Pen.width= 0.25;
Pen.fillColor= Color.black;
0.forBy(u.bounds.height, ydiv, {|y|
0.forBy(u.bounds.width, ydiv, {|x|
Pen.addOval(Rect(x, y, 1, 1));
});
});
Pen.fill;
s= ydiv*10;
x= ydiv*28;
Pen.fillOval(Rect.aboutPoint(Point(x, ydiv*12), s/2, s/2));
Pen.fillRect(Rect.aboutPoint(Point(x, ydiv*26), ydiv*12/2, ydiv*12/2));
Pen.fillColor= Color.white;
Pen.fillOval(Rect.aboutPoint(Point(x, ydiv*26), s/2, s/2));
Pen.fillColor= Color.black;
Pen.fillOval(Rect.aboutPoint(Point(x, ydiv*40), s*1.07/2, s*1.07/2));
Pen.fillColor= Color.white;
Pen.fillRect(Rect.aboutPoint(Point(x, ydiv*40), s*0.7/2, s*0.7/2));
};
w.front;
)
(
var w= Window("processing - page_042", Rect(100, 100, 442, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
u.background= Color.white;
u.drawFunc= {
var x1= 0, x2= 0, x3= 0, x5= 0, x4= 0;
Pen.setSmoothing(false);
Pen.width= 0.25;
51.do{|i|
Pen.line(Point(u.bounds.width-x2, u.bounds.height*0.0), Point(u.bounds.width-x2, u.bounds.height*0.2));
x2= x2+4.5;
Pen.line(Point(u.bounds.width-x1, u.bounds.height*0.2), Point(u.bounds.width-x1, u.bounds.height*0.4));
x1= x1+9;
Pen.line(Point(u.bounds.width-x3, u.bounds.height*0.4), Point(u.bounds.width-x3, u.bounds.height*0.6));
x3= x3+6.25;
Pen.line(Point(u.bounds.width-x5, u.bounds.height*0.6), Point(u.bounds.width-x5, u.bounds.height*0.8));
x5= x5+3.125;
Pen.line(Point(u.bounds.width-x4, u.bounds.height*0.8), Point(u.bounds.width-x4, u.bounds.height));
x4= x4+5.375;
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_060", Rect(100, 100, 180, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
u.background= Color.white;
u.drawFunc= {
Pen.setSmoothing(false);
Pen.width= 0.25;
0.forBy(u.bounds.height, 5, {|y|
0.forBy(u.bounds.width, 5, {|x|
if(x%20==0, {
Pen.line(Point(x, y), Point(x-3, y-3));
}, {
Pen.line(Point(x, y), Point(x-3, y+3));
});
});
});
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_078", Rect(100, 100, 360, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
u.background= Color.white;
u.drawFunc= {
var ax= 0, ay= 0;
Pen.setSmoothing(false);
Pen.strokeColor= Color.black;
(2..35).do{|e|
0.forBy(u.bounds.width, 2, {|x|
var n= x.linlin(0, u.bounds.width, 0, 1);
var y= 1-n.pow(e);
y= y*u.bounds.height;
if(x>0, {
Pen.line(Point(ax, ay), Point(x, y));
});
ax= x;
ay= y;
});
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_100", Rect(100, 100, 360, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var s= Font("Helvetica", 34); //Ziggurat-HTF-Black
u.background= Color.white;
u.drawFunc= {
var a= 37;
Pen.fillColor= Color.grey(204/255);
20.forBy(u.bounds.height+38, 38, {|i|
Pen.font= s.size_(34);
Pen.stringAtPoint(a.asAscii.asString, Point(50, i-34));
Pen.font= s.size_(10);
Pen.stringAtPoint(a.asString, Point(10, i-10-9));
a= a+1;
});
20.forBy(u.bounds.height+38, 38, {|i|
Pen.font= s.size_(34);
Pen.stringAtPoint(a.asAscii.asString, Point(170, i-34));
Pen.font= s.size_(10);
Pen.stringAtPoint(a.asString, Point(130, i-10-9));
a= a+1;
});
20.forBy(u.bounds.height+38, 38, {|i|
Pen.font= s.size_(34);
Pen.stringAtPoint(a.asAscii.asString, Point(290, i-34));
Pen.font= s.size_(10);
Pen.stringAtPoint(a.asString, Point(250, i-10-9));
a= a+1;
});
};
w.front;
)
(
var w= Window("processing - page_110", Rect(100, 100, 360, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var s= Font("Helvetica", 460); //Ziggurat-HTF-Black
u.background= Color.white;
u.drawFunc= {
Pen.fillColor= Color.grey(0, 50/255);
Pen.font= s;
6.do{|i|
Pen.stringAtPoint(i.asString, Point(u.bounds.width/2-120, u.bounds.height*0.98-(i*40)-460));
};
};
w.front;
)
(
var w= Window("processing - page_136", Rect(100, 100, 360, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
u.background= Color.white;
u.drawFunc= {
Pen.setSmoothing(true);
Pen.fillColor= Color.grey(0, 10/255);
Pen.translate(33, 66);
45.do{|i|
Pen.scale(1.02, 1.02);
Pen.fillOval(Rect.aboutPoint(Point(25, 90), 200/2, 200/2));
};
};
w.front;
)
(
var w= Window("processing - page_144", Rect(100, 100, 440, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
u.background= Color.white;
u.drawFunc= {
var scaleVal, angleInc, angle;
Pen.setSmoothing(false);
Pen.strokeColor= Color.black;
Pen.width= 0.25;
Pen.fillColor= Color.black;
scaleVal= 16;
angleInc= pi/24;
angle= 0;
20.forBy(u.bounds.width-20-5, 5, {|offset|
0.forBy(u.bounds.height, 2, {|y|
var x= offset+(sin(angle)*scaleVal);
Pen.line(Point(x, y), Point(x+0.125, y+0.125));
angle= angle+angleInc;
});
angle= angle+pi;
});
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_222", Rect(100, 100, 460, 225), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var s= Font("Helvetica", 50); //Ziggurat-HTF-Black
u.background= Color.white;
u.drawFunc= {
var c1, c2, c3, c4;
Pen.fillColor= Color.grey(204/255);
Pen.font= s;
c1= #[$1, $2, $3, $4, $5, $6, $7, $8, $9, $0, $-, $=];
c2= #[$Q, $W, $E, $R, $T, $Y, $U, $I, $O, $P, $[, $]];
c3= #[$A, $S, $D, $F, $G, $H, $J, $K, $L, $;];
c4= #[$Z, $X, $C, $V, $B, $N, $M, $,, $., $/];
Pen.strokeColor= Color.grey(204/255);
Pen.width= 0.5;
Pen.setSmoothing(false);
c1.do{|c, i|
Pen.stringAtPoint(c.asString, Point(20+(i*78)-12, 50-50));
if(i%2!=0, {
Pen.line(Point(20+(i*39), 40), Point(20+(i*39), 20));
});
};
c2.do{|c, i|
Pen.stringAtPoint(c.asString, Point(46+(i*78)-12, 105-50));
if(i%2!=0, {
Pen.line(Point(46+(i*39), 95), Point(46+(i*39), 75));
});
};
c3.do{|c, i|
Pen.stringAtPoint(c.asString, Point(65+(i*78)-12, 160-50));
if(i%2!=0, {
Pen.line(Point(65+(i*39), 150), Point(65+(i*39), 130));
});
};
c4.do{|c, i|
Pen.stringAtPoint(c.asString, Point(90+(i*78)-12, 215-50));
if(i%2!=0, {
Pen.line(Point(90+(i*39), 205), Point(90+(i*39), 185));
});
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_228", Rect(100, 100, 360, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var moveX= 0, moveY= 0, dragX= 0, dragY= 0, button= false;
w.acceptsMouseOver= true;
u.mouseOverAction= {|v, x, y|
moveX= x;
moveY= y;
u.refresh;
};
u.mouseMoveAction= {|v, x, y|
dragX= x;
dragY= y;
u.refresh;
};
u.background= Color.white;
u.drawFunc= {
Pen.strokeColor= Color.black;
Pen.strokeOval(Rect.aboutPoint(Point(dragX, dragY), 200/2, 200/2));
Pen.fillColor= Color.grey(153/255);
Pen.fillOval(Rect.aboutPoint(Point(moveX, moveY), 200/2, 200/2));
};
w.front;
)
(
var w= Window("processing - page_254", Rect(100, 100, 442, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var gx, gy, mx, my, drawCursor;
w.acceptsMouseOver= true;
gx= u.bounds.width;
gy= u.bounds.height;
mx= gx/2;
my= gy/2;
u.mouseOverAction= {|v, x, y|
mx= x;
my= y;
u.refresh;
};
u.background= Color.white;
u.drawFunc= {
var rot;
Pen.strokeColor= Color.grey(0.2);
16.forBy(gx+2, 32, {|i|
11.forBy(gy, 30, {|j|
rot= pi.neg/4+atan2(j-my, i-mx);
drawCursor.value(i, j, 0.5, rot);
});
});
};
drawCursor= {|x, y, myscale, myrot|
Pen.use{
Pen.translate(x, y);
Pen.rotate(myrot, 0, 0);
Pen.scale(myscale, myscale);
Pen.moveTo(Point(7, 21));
Pen.lineTo(Point(4, 13));
Pen.lineTo(Point(1, 16));
Pen.lineTo(Point(0, 16));
Pen.lineTo(Point(0, 0));
Pen.lineTo(Point(1, 0));
Pen.lineTo(Point(12, 11));
Pen.lineTo(Point(12, 12));
Pen.lineTo(Point(7, 12));
Pen.lineTo(Point(10, 20));
Pen.lineTo(Point(9, 21));
Pen.lineTo(Point(7, 21));
Pen.stroke;
};
};
w.front;
)
(
var w= Window("processing - page_278", Rect(100, 100, 750, 800), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var spot= {
var radius= 15*2;
(
\radius: radius,
\x: radius.rrand(u.bounds.width-15),
\y: radius.rrand(u.bounds.height-15),
\speedX: 0.4.rrand(1),
\speedY: 0.4.rrand(1),
\directionX: 1,
\directionY: -1,
\init: {|envir|
var r= 1.0.rand;
if(r<0.25, {
envir.directionX= 1;
envir.directionY= 1;
}, {
if(r<0.5, {
envir.directionX= -1;
envir.directionY= 1;
}, {
if(r<0.75, {
envir.directionX= 1;
envir.directionY= -1;
}, {
envir.directionX= -1;
envir.directionY= -1;
});
});
});
},
\updateDisplay: {|envir|
Pen.addOval(Rect(envir.x, envir.y, envir.radius, envir.radius));
envir.x= envir.x+(envir.speedX*envir.directionX);
if(envir.x>(u.bounds.width-envir.radius) or:{envir.x<=0}, {
envir.directionX= envir.directionX.neg;
});
envir.y= envir.y+(envir.speedY*envir.directionY);
if(envir.y>(u.bounds.height-envir.radius) or:{envir.y<=0}, {
envir.directionY= envir.directionY.neg;
});
}
)};
var sps= spot.dup(36).do{|x| x.init};
thisThread.randSeed= 0;
u.clearOnRefresh= false;
u.animate= true;
u.drawFunc= {
Pen.fillColor= Color.grey(1, 12/255);
Pen.fillRect(u.bounds);
Pen.fillColor= Color.black;
sps.do{|sps|
sps.updateDisplay;
};
Pen.fill;
};
w.front;
)
(
var w= Window("processing - page_290", Rect(100, 100, 513, 462), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var inc= 0, tail;
u.background= Color.white;
u.animate= true;
u.drawFunc= {
var angle;
Pen.setSmoothing(true);
Pen.strokeColor= Color.grey(0, 143/255);
thisThread.randSeed= 0;
inc= inc+0.01;
angle= sin(inc)/10+(sin(inc*1.2)/20);
-20.forBy(u.bounds.width+20, 20, {|i|
tail.value(i, 100, 5.rrand(12), angle*1.0.rrand(1.3));
tail.value(i, 200, 5.rrand(12), angle.neg*1.0.rrand(1.3));
tail.value(i, 300, 5.rrand(12), angle*1.0.rrand(1.3));
tail.value(i, 400, 5.rrand(12), angle.neg*1.0.rrand(1.3));
});
};
tail= {|x, y, units, angle|
Pen.use{
Pen.translate(x, y);
units.forBy(0, -1, {|i|
Pen.width= i/2;
Pen.line(Point(0, 0), Point(0, -8));
Pen.translate(0, -8);
Pen.rotate(angle);
Pen.stroke;
});
};
};
w.front;
)
(
var w= Window("processing - page_300", Rect(100, 100, 180, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var inc= 0, x= 0.dup(u.bounds.height), y= 0.dup(u.bounds.height), mx= 0, my= 0;
var mouseX= 0, mouseY= 0;
w.acceptsMouseOver= true;
u.mouseOverAction= {|v, x, y|
mouseX= x;
mouseY= y;
};
u.background= Color.white;
u.animate= true;
u.drawFunc= {
Pen.width= 0.25;
y= y.rotate(1);
my= my+(mouseX-my*0.1);
y.put(0, my);
Pen.use{
Pen.moveTo(Point(y[1], 0));
2.forBy(y.size-1, 1, {|i|
Pen.lineTo(Point(y[i], i));
});
Pen.stroke;
};
x= x.rotate(1);
x.put(0, mx);
mx= mx+(mouseY-mx*0.1);
Pen.use{
Pen.moveTo(Point(x[1]*u.bounds.width/u.bounds.height, 0));
2.forBy(x.size-1, 1, {|i|
Pen.lineTo(Point(x[i]*u.bounds.width/u.bounds.height, i));
});
Pen.stroke;
};
};
w.front;
)
(
var w= Window("processing - page_326", Rect(100, 100, 842, 550), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var f, s, angle= 0;
s= "012345678901234567890123456789";
f= Font("Helvetica", 24);
u.background= Color.white;
u.animate= true;
u.drawFunc= {
var cw= 0;
Pen.fillColor= Color.grey(204/255);
Pen.translate(10, 0);
angle= angle+0.1;
s.size.do{|i|
var c= sin(angle+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 60));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/4/2)+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 120));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/4)+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 180));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/4+(pi/4/2))+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 240));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/2)+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 300));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/2+(pi/4/2))+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 360));
cw= cw+(f.size*0.667);
};
cw= 0;
s.size.do{|i|
var c= sin(angle+(pi/2+(pi/4))+(i/pi));
Pen.font= f.size_(c+1*18+6);
Pen.stringAtPoint(s[i].asString, Point(cw, 420));
cw= cw+(f.size*0.667);
};
};
w.front;
)
(
var w= Window("processing - page_366", Rect(100, 100, 200*11, 200*10), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var angle, speed, circlePhase;
u.background= Color.white;
u.drawFunc= {
angle= 0;
speed= 0.2;
Pen.fillColor= Color.grey(0, 60/255);
10.do{|y|
11.do{|i|
Pen.use{
Pen.translate(i*200, y*200);
circlePhase.value(0);
circlePhase.value(pi/4);
circlePhase.value(pi/2);
angle= angle+speed;
};
};
};
};
circlePhase= {|phase|
var diameter= 65+(sin(angle+phase)*130)/2;
Pen.fillOval(Rect.aboutPoint(Point(100, 100), diameter, diameter));
};
w.front;
)
(
var w= Window("processing - page_394", Rect(100, 100, 513, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var numRings= 50, currentRing= 0;
var ring= {(
\x: 0,
\y: 0,
\diameter: 1,
\on: false,
\start: {|envir, xpos, ypos|
envir.x= xpos;
envir.y= ypos;
envir.on= true;
envir.diameter= 1;
},
\agrow: {|envir|
if(envir.on, {
envir.diameter= envir.diameter+0.5;
if(envir.diameter>(u.bounds.height*2), {
envir.on= false;
});
});
},
\display: {|envir|
if(envir.on, {
Pen.addOval(Rect.aboutPoint(Point(envir.x, envir.y), envir.diameter, envir.diameter));
});
}
)};
var rings= ring.dup(numRings);
u.background= Color.white;
u.animate= true;
u.mouseDownAction= {|v, x, y|
rings[currentRing].start(x, y);
currentRing= currentRing+1;
if(currentRing>=numRings, {
currentRing= 0;
});
};
u.drawFunc= {
Pen.strokeColor= Color.grey(102/255, 153/255);
rings.do{|ring|
ring.agrow;
ring.display;
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_412", Rect(100, 100, 400, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var s= 0, mouseX= 0, mouseY= 0, pmouseX= 0, pmouseY= 0;
//u.background= Color.grey(0.8);
w.acceptsMouseOver= true;
u.clearOnRefresh= false;
u.mouseOverAction= {|v, x, y|
mouseX= x;
mouseY= y;
s= ([x, y]-[pmouseX, pmouseY]).sum{|z| z*z}.sqrt.abs;
u.refresh;
pmouseX= x;
pmouseY= y;
};
u.drawFunc= {
Pen.fillColor= Color.grey(0, 102/255);
Pen.fillOval(Rect.aboutPoint(Point(mouseX, mouseY), s/2, s/2));
Pen.strokeColor= Color.white;
Pen.line(Point(mouseX, mouseY), Point(mouseX+1, mouseY+1));
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_420", Rect(100, 100, 513, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var mouseX= 0, mouseY= 0, clear= true;
u.clearOnRefresh= false;
u.mouseMoveAction= {|v, x, y|
clear= false;
mouseX= x;
mouseY= y;
u.refresh;
"hi".postln;
};
u.mouseDownAction= {
clear= true;
u.refresh;
};
u.drawFunc= {
Pen.setSmoothing(false);
if(clear, {
Pen.fillColor= Color.white;
Pen.fillRect(u.bounds);
});
Pen.strokeColor= Color.black;
Pen.line(Point(mouseX, mouseY), Point(mouseX, mouseY+0.5));
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - page_476", Rect(100, 100, 513, 666), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var arrowParticle= {(
\x: 0,
\y: 0,
\vx: 0,
\vy: 0,
\radius: 1,
\gravity: 0.1,
\angle: 0,
\shaftLength: 20,
\setup: {|envir, xpos, ypos, velx, vely, r|
envir.x= xpos;
envir.y= ypos;
envir.vx= velx;
envir.vy= vely;
envir.radius= r;
},
\aupdate: {|envir|
envir.vy= envir.vy+envir.gravity;
envir.y= envir.y+envir.vy;
envir.x= envir.x+envir.vx;
envir.angle= atan2(envir.vy, envir.vx);
},
\display: {|envir|
Pen.use{
Pen.translate(envir.x, envir.y);
Pen.rotate(envir.angle);
Pen.scale(envir.shaftLength, envir.shaftLength);
Pen.width= 1/envir.shaftLength;
Pen.line(Point(0, 0), Point(0.25, 0));
Pen.line(Point(0.25, 0), Point(0.174, -0.075));
Pen.line(Point(0.25, 0), Point(0.174, 0.075));
Pen.stroke;
};
}
)};
var num= 900;
var radius= 1.2;
var p= {
var velX= -1.0.rrand(10);
var velY= -20.0.rrand(-6);
arrowParticle.value.setup(u.bounds.width/4, u.bounds.height, velX, velY, 0.4);
}.dup(num);
u.background= Color.white;
u.animate= true;
u.drawFunc= {
p.do{|a|
a.aupdate;
a.display;
};
};
w.front;
)
(
var w= Window("processing - page_xx", Rect(100, 100, 250, 925), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var x, y, r= 350, n= 8, rs= 12;
var drawCircle;
u.background= Color.white;
thisThread.randSeed= rs;
y= u.bounds.height*0.33;
x= u.bounds.width/2;
u.drawFunc= {
drawCircle.value(x, y, r, n);
};
drawCircle= {|x, y, radius, num|
var value= 126*num/6;
var branches;
Pen.fillColor= Color.grey(value/255, 153/255);
Pen.fillOval(Rect.aboutPoint(Point(x, y), radius, radius));
if(num>1, {
num= num-1;
branches= 2.rrand(6);
branches.do{|i|
var a= 2pi.rand;
var newx= x+(cos(a)*6*num);
var newy= y+(sin(a)*6*num);
drawCircle.value(newx, newy+26, radius/2, num);
};
});
};
w.front;
)
Processing-Book-001 / Synthesis
(
var w= Window("processing - _01_waves", Rect(100, 100, 400, 400), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var shapeTriangleStrip, points;
u.background= Color.white;
u.drawFunc= {
var angle= 0, magnitude= 24;
points= [];
0.forBy(u.bounds.width, 8, {|x|
var y, y2;
y= 50+(sin(angle)*magnitude);
angle= angle+(pi/48);
y2= 70+(sin(angle+(pi/6))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x, y2));
});
shapeTriangleStrip.value(points);
Pen.stroke;
};
shapeTriangleStrip= {|points|
var max= points.size-1;
points.do{|p, i|
if(i<max, {Pen.line(p, points[i+1])});
if(i>1, {Pen.line(p, points[i-2])});
};
};
w.front;
)
(
var w= Window("processing - _02_waves", Rect(100, 100, 400, 400), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var shapeTriangleStrip, points;
u.background= Color.white;
u.drawFunc= {
var angle= 0, magnitude= 18;
magnitude.neg.forBy(u.bounds.height+magnitude, 24, {|i|
points= [];
0.forBy(u.bounds.width, 8, {|x|
var y, y2;
y= i+(sin(angle)*magnitude);
angle= angle+(pi/24);
y2= i+10+(sin(angle+(pi/12))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x, y2));
});
shapeTriangleStrip.value(points);
Pen.stroke;
});
};
shapeTriangleStrip= {|points|
var max= points.size-1;
points.do{|p, i|
if(i<max, {Pen.line(p, points[i+1])});
if(i>1, {Pen.line(p, points[i-2])});
};
};
w.front;
)
//almost. some problems with fill in this example
(
var w= Window("processing - _03_waves", Rect(100, 100, 1200, 280), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var shapeTriangleStripFill, points;
u.background= Color.white;
u.drawFunc= {
var angle= 0, angle2= 0, magnitude= 8;
magnitude.neg.forBy(u.bounds.height+magnitude, 18, {|i|
angle2= angle;
points= [];
Pen.fillColor= Color.black;
0.forBy(u.bounds.width, 8, {|x|
var y, y2;
y= i+(sin(angle)*magnitude);
angle= angle+(pi/24);
y2= i+4+(sin(angle+(pi/12))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x, y2));
});
shapeTriangleStripFill.value(points);
Pen.fill;
points= [];
Pen.fillColor= Color.grey(204/255);
0.forBy(u.bounds.width, 8, {|x|
var y, y2;
y= i+4+(sin(angle2+(pi/12))*magnitude);
angle2= angle2+(pi/24);
y2= i+8+(sin(angle2+(pi/12))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x, y2));
});
shapeTriangleStripFill.value(points);
Pen.fill;
});
};
shapeTriangleStripFill= {|points|
var max= points.size-1;
points.do{|p, i|
Pen.moveTo(p);
if(i<max, {Pen.lineTo(points[i+1])});
if(i>1, {Pen.lineTo(points[i-2])});
};
};
w.front;
)
//almost. some problems with fill in this example
(
var w= Window("processing - _04_waves", Rect(100, 100, 1200, 280), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var shapeTriangleStripFill, points;
u.background= Color.white;
u.drawFunc= {
var angle= 0, magnitude= 16;
magnitude.neg.forBy(u.bounds.width+magnitude, 16, {|i|
Pen.fillColor= Color.grey(i/u.bounds.width);
points= [];
0.forBy(u.bounds.height, 6, {|y|
var x, x2;
x= i+(sin(angle)*magnitude);
angle= angle+(pi/22);
x2= i+8+(sin(angle+(pi/22))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x2, y));
});
shapeTriangleStripFill.value(points);
Pen.fill;
});
};
shapeTriangleStripFill= {|points|
var max= points.size-1;
points.do{|p, i|
Pen.moveTo(p);
if(i<max, {Pen.lineTo(points[i+1])});
if(i>1, {Pen.lineTo(points[i-2])});
};
};
w.front;
)
//almost. some problems with fill in this example
(
var w= Window("processing - _05_waves", Rect(100, 100, 1200, 280), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var shapeTriangleStripFill, points;
u.background= Color.white;
u.drawFunc= {
var angle= pi, angle2= pi, magnitude= 3;
magnitude.neg.forBy(u.bounds.height+magnitude, 12, {|i|
angle2= angle;
Pen.fillColor= Color.black;
points= [];
0.forBy(u.bounds.width, 8, {|x|
var y, y2;
y= i+(sin(angle)*magnitude);
angle= angle+(pi/24);
y2= i+4+(sin(angle+(pi/12))*magnitude);
points= points.add(Point(x, y));
points= points.add(Point(x, y2));
});
shapeTriangleStripFill.value(points);
Pen.fill;
});
};
shapeTriangleStripFill= {|points|
var max= points.size-1;
points.do{|p, i|
Pen.moveTo(p);
if(i<max, {Pen.lineTo(points[i+1])});
if(i>1, {Pen.lineTo(points[i-2])});
};
};
w.front;
)
(
var w= Window("processing - _01_grids", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var sqNum= 12, sqSize= u.bounds.width.div(sqNum), halfSize= sqSize.div(2);
u.background= Color.white;
u.drawFunc= {
Pen.setSmoothing(false);
halfSize.forBy(u.bounds.width, sqSize, {|y|
halfSize.forBy(u.bounds.height, sqSize, {|x|
Pen.strokeRect(Rect(x-halfSize+2, y-halfSize+2, sqSize-4, sqSize-4));
});
});
};
w.front;
)
(
var w= Window("processing - _02_grids", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var numSquares= 12, gap= 4, sqSize= (u.bounds.width-(gap*2)).div(numSquares),
halfSize= sqSize.div(2), offset= halfSize+gap, ydiv= sqSize.div(12);
u.background= Color.white;
u.drawFunc= {
Pen.setSmoothing(false);
numSquares.do{|y|
numSquares.do{|x|
var xp= offset+(x*sqSize);
var yp= offset+(y*sqSize);
0.forBy(sqSize-(gap*2), ydiv, {|i|
var yy= i*halfSize+gap+i;
Pen.line(Point(xp-halfSize+gap, yp-halfSize+gap+i), Point(xp+halfSize-gap, yp-halfSize+gap+i));
});
};
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - _03_grids", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var numSquares= 6, gap= 8, sqSize= (u.bounds.width-(gap*2)).div(numSquares);
u.background= Color.black;
u.drawFunc= {
Pen.setSmoothing(false);
Pen.strokeColor= Color.grey(1, 204/255);
numSquares.do{|y|
numSquares.do{|x|
var sqArea= 10.rrand(100);
var halfArea= sqArea.div(2);
var ydiv= sqArea.div(12);
var offset= sqSize/2+gap;
var xp= offset+(x*sqSize);
var yp= offset+(y*sqSize);
0.forBy(sqArea-(gap*2), ydiv, {|i|
var yy= i*halfArea+gap+i;
Pen.line(Point(xp-halfArea+gap, yp-halfArea+gap+i), Point(xp+halfArea-gap, yp-halfArea+gap+i));
});
};
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - _04_grids", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var numSquares= 6, gap= 8, xUnit= u.bounds.width-(gap*2)/numSquares, yUnit= u.bounds.height-(gap*2)/numSquares;
u.background= Color.black;
u.drawFunc= {
Pen.setSmoothing(false);
Pen.strokeColor= Color.grey(1, 204/255);
numSquares.do{|y|
numSquares.do{|x|
var squareWidth= 10.rrand(300);
var squareHeight= squareWidth.round;
var ydiv= squareHeight.div(12);
var xoff= xUnit/2+gap;
var yoff= yUnit/2+gap;
var xp= xoff+(x*xUnit);
var yp= yoff+(y*yUnit);
0.forBy(squareHeight-(gap*2), ydiv, {|i|
var yy= i*squareHeight/2+gap+i;
Pen.line(Point(xp-(squareWidth/2)+gap, yp-(squareHeight/2)+gap+i), Point(xp+(squareWidth/2)-gap, yp-(squareHeight/2)+gap+i));
});
};
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - _05_grids", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var numSquares= 12, gap= 4, xUnit= u.bounds.width-(gap*2)/numSquares, yUnit= u.bounds.height-(gap*2)/numSquares, squareWidth= xUnit, squareHeight= yUnit;
u.background= Color.black;
u.drawFunc= {
Pen.setSmoothing(false);
Pen.strokeColor= Color.grey(1, 204/255);
numSquares.do{|y|
numSquares.do{|x|
var ydiv= squareHeight/12;
var xoff= xUnit/2+gap;
var yoff= yUnit/2+gap;
var xp= xoff+(x*xUnit);
var yp= yoff+(y*yUnit);
0.forBy(squareHeight-(gap*2), ydiv, {|i|
var yy= i*squareHeight/2+gap+i;
Pen.line(Point(xp-(squareWidth/2)+gap, yp-(squareHeight/2)+gap+i), Point(xp+(squareWidth/2)-gap, yp-(squareHeight/2)+gap+i));
});
ydiv= 1.0.rrand(squareHeight/4);
0.forBy(squareHeight-(gap*2), ydiv, {|i|
var yy= i*squareHeight/2+gap+i;
Pen.line(Point(xp-(squareWidth/2)+gap, yp-(squareHeight/2)+gap+i), Point(xp+(squareWidth/2)-gap, yp-(squareHeight/2)+gap+i));
});
};
};
Pen.stroke;
};
w.front;
)
(
var w= Window("processing - _04_mandelbrot", Rect(100, 100, 600, 600), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var co; // color
var accuracy= 200; // Lower numbers are less accurate (lower resolution)
var zoom= 200; // Try these: 200 250 350 500 700 950 1250 1600 2000 2450 2950 3500
var dx= u.bounds.width/2;
var dy= u.bounds.height/2;
var xscale= u.bounds.width/zoom;
var yscale= u.bounds.height/zoom;
var xOff= dx/u.bounds.width*xscale/2;
var yOff= -1+(dy/u.bounds.height*yscale/2);
u.background= Color.black;
u.drawFunc= {
Pen.setSmoothing(false);
u.bounds.width.do{|i|
u.bounds.height.do{|j|
var k= 0, zz1, zz2;
var re= i/zoom-xOff-(dx/zoom);
var im= j/zoom-yOff-(dy/zoom);
// Complex number z, c
var z1= 0.0;
var z2= 0.0;
co= 0;
while({k<accuracy}, {
zz1= z1.squared-z2.squared+re;
zz2= 2*z1*z2+im;
z1= zz1;
z2= zz2;
// Check if the modulus of complex num is within limit
if((z1.squared+z2.squared).sqrt>2, {
co= 1-(k/accuracy);
k= accuracy;
}, {
k= k+1;
});
});
Pen.strokeColor= Color(co, co, co);
Pen.strokeRect(Rect.aboutPoint(Point(i, j), 1, 1));
};
};
};
w.front;
)
(
var w= Window("processing - _05_tennis", Rect(100, 100, 640, 480), false);
var u= UserView(w, Rect(0, 0, w.bounds.width, w.bounds.height));
var ballX= 0, ballY= u.bounds.height/2, ballDir= 1, ballSize= 10, ballAngle= 0;
var paddleWidth= 20, paddleHeight= 40, wallGap= 50, netSegment= u.bounds.height/32;
var mouseX= 0, mouseY= 0, pmouseX= 0, pmouseY= 0;
w.acceptsMouseOver= true;
u.mouseOverAction= {|v, x, y|
pmouseX= (x-mouseX).abs;
pmouseY= (y-mouseY).abs;
mouseX= x;
mouseY= y;
};
u.background= Color.black;
u.animate= true;
u.drawFunc= {
var paddleY, py;
Pen.strokeColor= Color.white;
0.forBy(u.bounds.height, netSegment, {|i|
Pen.line(Point(u.bounds.width/2, i), Point(u.bounds.width/2, i+(netSegment/3)));
});
Pen.stroke;
ballX= ballX+(ballDir*2);
ballY= ballY+ballAngle;
if(ballX>(u.bounds.width+(ballSize*2)), {
ballX= ballSize.neg;
ballY= 0.rrand(u.bounds.height-ballSize);
ballAngle= 0;
(""++ballX+":"+ballY+":"+ballAngle).postln;
});
if(ballX<(ballSize.neg*2), {
ballX= u.bounds.width;
ballY= 0.rrand(u.bounds.height-ballSize);
ballAngle= 0;
(""++ballX+":"+ballY+":"+ballAngle).postln;
});
paddleY= mouseY.clip(0, u.bounds.height-paddleHeight);
py= u.bounds.width-wallGap-ballSize;
if(ballX>=py and:{ballY+ballSize>=paddleY and:{ballY<=(paddleY+paddleHeight)}}, {
ballDir= ballDir* -1;
if(mouseY!=pmouseY, {
ballAngle= (mouseY-pmouseY)/2;
ballAngle= ballAngle.clip(-5, 5);
});
});
if(ballX<0, {
ballDir= ballDir* -1;
});
if(ballY>(u.bounds.height-ballSize) or:{ballY<0}, {
ballAngle= ballAngle* -1;
});
Pen.fillColor= Color.white;
Pen.fillRect(Rect(ballX, ballY, ballSize, ballSize));
Pen.fillColor= Color.grey(153/255);
Pen.fillRect(Rect(u.bounds.width-wallGap, paddleY, paddleWidth, paddleHeight));
Pen.fillRect(Rect(wallGap, u.bounds.height-paddleY-paddleHeight, paddleWidth, paddleHeight));
};
w.front;
)