void StartRun(double deltaMs) { cRad = mMax.x*pSize.Val()/6; }\r
color CalcPoint(xyz p) {\r
v.set(x.getValuef(), y.getValuef(), z.getValuef());\r
+ v.z=0;p.z=0;// ignore z dimension\r
switch(pChoose.Cur()) {\r
case 0: vMir.set(mMax); vMir.subtract(p);\r
return color(0,0,c1c(1 - min(v.distance(p), v.distance(vMir))*.5/cRad)); // balls\r
DParam pAmp, pRadius, pBounce;\r
\r
float t,amp,rad,bnc;\r
- \r
+ float zTheta=0;\r
ArrayList<rWave> waves = new ArrayList<rWave>(10);\r
\r
rAngle a1 = new rAngle(), a2 = new rAngle(),\r
pBounce = addParam("Bnc" , .2 );\r
pAmp = addParam("Amp" , .2 );\r
pTempoMult = addPick ("TMult" , 0 , 5 , new String[] {"1x", "2x", "4x", "8x", "16x", "Rand" } );\r
- pTimePattern= addPick ("TPat" , 6 , 7 , new String[] {"Bounce", "Sin", "Roll", "Quant", "Accel", "Deccel", "Slide", "Rand"} );\r pShape = addPick ("Shape" , 2 , 15 , new String[] {"Line", "Tap", "V", "RandV",\r
+ pTimePattern= addPick ("TPat" , 6 , 7 , new String[] {"Bounce", "Sin", "Roll", "Quant", "Accel", "Deccel", "Slide", "Rand"} );\r pShape = addPick ("Shape" , 3 , 15 , new String[] {"Line", "Tap", "V", "RandV",\r
"Pyramid", "Wings", "W2", "Clock",\r
"Triangle", "Quad", "Sphere", "Cone",\r
"Noise", "Wave", "?", "?"} );\r
}\r
}\r
\r
+ void StartPattern() { zTheta=0; }\r
void StartRun(double deltaMs) {\r
t = lx.tempo.rampf();\r
amp = pAmp.Val();\r
rad = pRadius.getValuef();\r
bnc = pBounce.getValuef(); \r
+ zTheta += deltaMs*(pSpin .Val()-.5)*.01;\r
\r
- Theta .set(pRotX.Val()*PI*2, pRotY.Val()*PI*2, pRotZ.Val()*PI*2);\r
+ Theta .set(pRotX.Val()*PI*2, pRotY.Val()*PI*2, pRotZ.Val()*PI*2 + zTheta);\r
TSin .set(sin(Theta.x), sin(Theta.y), sin(Theta.z));\r
TCos .set(cos(Theta.x), cos(Theta.y), cos(Theta.z));\r
\r
\r
float mp = min(Pn.x, Pn.z);\r
float yt = map(t,0,1,.5-bnc/2,.5+bnc/2);\r
- float r;\r
+ float r,d;\r
\r
switch (pShape.Cur()) {\r
case 0: V.set(Pn.x, yt , Pn.z); break; // bouncing line\r
case 5: V.set(Pn.x, bnc*map((Pn.x-.5)*(Pn.x-.5),0,.25,0,t-.5)+.5, Pn.z); break; // wings\r
case 6: V.set(Pn.x, bnc*map((mp -.5)*(mp -.5),0,.25,0,t-.5)+.5, Pn.z); break; // wings\r
\r
-\r
-\r
- case 7: return color(0,0, min(\r
+ case 7: d = min(\r
distToSeg(Px.x, Px.y, a1.getX(70),a1.getY(70), mCtr.x, mCtr.y),\r
- distToSeg(Px.x, Px.y, a2.getX(40),a2.getY(40), mCtr.x, mCtr.y)) <rad*40?100:0); // clock\r
+ distToSeg(Px.x, Px.y, a2.getX(40),a2.getY(40), mCtr.x, mCtr.y));\r
+ d = constrain(30*(rad*40-d),0,100);\r
+ return color(0,max(0,150-d), d); // clock\r
\r
- case 8: r = amp*200 * map(bnc,0,1,1,sin(PI*t)); return color(0,0, min(\r
+ case 8: r = amp*200 * map(bnc,0,1,1,sin(PI*t));\r
+ d = min(\r
distToSeg(Px.x, Px.y, a1.getX(r),a1.getY(r), a2.getX(r),a2.getY(r)),\r
distToSeg(Px.x, Px.y, a2.getX(r),a2.getY(r), a3.getX(r),a3.getY(r)),\r
distToSeg(Px.x, Px.y, a3.getX(r),a3.getY(r), a1.getX(r),a1.getY(r)) // triangle\r
- ) <rad*40?100:0);\r
- \r
- case 9: r = amp*200 * map(bnc,0,1,1,sin(PI*t)); return color(0,0, min(\r
+ );\r
+ d = constrain(30*(rad*40-d),0,100);\r
+ return color(0,max(0,150-d), d); // clock\r
+\r
+ case 9: r = amp*200 * map(bnc,0,1,1,sin(PI*t));\r
+ d = min(\r
distToSeg(Px.x, Px.y, a1.getX(r),a1.getY(r), a2.getX(r),a2.getY(r)),\r
distToSeg(Px.x, Px.y, a2.getX(r),a2.getY(r), a3.getX(r),a3.getY(r)),\r
distToSeg(Px.x, Px.y, a3.getX(r),a3.getY(r), a4.getX(r),a4.getY(r)),\r
distToSeg(Px.x, Px.y, a4.getX(r),a4.getY(r), a1.getX(r),a1.getY(r)) // quad\r
- ) <rad*40?100:0); // shape\r
+ );\r
+ d = constrain(30*(rad*40-d),0,100);\r
+ return color(0,max(0,150-d), d); // clock\r
\r
- \r
- case 10: r = map(bnc,0,1,a1.r,amp*200*sin(PI*t)); \r
+ case 10:\r
+ r = map(bnc,0,1,a1.r,amp*200*sin(PI*t));\r
return color(0,0,c1c(.9+2*rad - dist(Px.x,Px.y,a1.getX(r),a1.getY(r))*.03) ); // sphere\r
\r
- case 11: return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0)); // cone\r
+ case 11:\r
+ Px.z=mCtr.z; cMid.z=mCtr.z;\r
+ return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0)); // cone\r
\r
case 12: return color(100 + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200,\r
85,c1c(Pn.y < noise(Pn.x + NoiseMove/2000.,Pn.z)*(1+amp)-amp/2.-.1 ? 1 : 0)); // noise\r
default: return color(0,0,0);\r
}\r
\r
- return color(0,0,c1c(1 - V.distance(Pn)/rad));\r
+ return color(0,\r
+ 150-c1c(1 - V.distance(Pn)/rad),\r
+ c1c(1 - V.distance(Pn)/rad));\r
}\r
}\r
//----------------------------------------------------------------------------------------------------------------------------------\r