eliminated xyz class in favor of PVector
authorbb3dan <gitdan@citopia.com>
Wed, 23 Oct 2013 21:17:15 +0000 (17:17 -0400)
committerbb3dan <gitdan@citopia.com>
Wed, 23 Oct 2013 21:17:15 +0000 (17:17 -0400)
AlexGreen.pde
DanHorwitz.pde
DanUtil.pde

index e240f7db9d08bf65ad69f76d6c2fd14734c9084c..488d04b6fcb6bd3b0ff53f9d41e57b4a3221fe70 100644 (file)
@@ -142,7 +142,7 @@ final Sphery[] spherys;
    //   spheremode++;
    //     }
 
-  color CalcPoint(xyz Px) 
+  color CalcPoint(PVector Px) 
   { 
        // if (spheremode == 0 )
               //{
index 4f0c41b03ec422375facb9ae8feb3ac6a226013e..01904013009f04332910bbd9f9081c6f10e92ca0 100644 (file)
@@ -3,7 +3,7 @@ public class Pong extends DPat {
        SinLFO x,y,z,dx,dy,dz;
        float cRad;     BasicParameter pSize;
        Pick    pChoose;
-       xyz     v = new xyz(), vMir =  new xyz();
+       PVector v = new PVector(), vMir =  new PVector();
 
        Pong(GLucose glucose) {
                super(glucose);
@@ -15,19 +15,19 @@ public class Pong extends DPat {
                addModulator(y  = new SinLFO(cRad, mMax.y - cRad, 0)).trigger();        y.modulateDurationBy(dy);
                addModulator(z  = new SinLFO(cRad, mMax.z - cRad, 0)).trigger();        z.modulateDurationBy(dz);
            pSize       = addParam      ("Size"                 , 0.4   );
-           pChoose = addPick   ("Animiation"   , 0, 2, new String[] {"Pong", "Ball", "Cone"}   );
+           pChoose = addPick   ("Animiation"   , 2, 2, new String[] {"Pong", "Ball", "Cone"}   );
        }
 
        void    StartRun(double deltaMs)        { cRad = mMax.x*val(pSize)/6; }
-       color   CalcPoint(xyz p)                {
+       color   CalcPoint(PVector p)            {
                v.set(x.getValuef(), y.getValuef(), z.getValuef());
                v.z=0;p.z=0;// ignore z dimension
                switch(pChoose.Cur()) {
-               case 0: vMir.set(mMax); vMir.subtract(p);
-                               return lx.hsb(lxh(),100,c1c(1 - min(v.distance(p), v.distance(vMir))*.5/cRad));         // balls
-               case 1: return lx.hsb(lxh(),100,c1c(1 - v.distance(p)*.5/cRad));                                                        // ball
+               case 0: vMir.set(mMax); vMir.sub(p);
+                               return lx.hsb(lxh(),100,c1c(1 - min(v.dist(p), v.dist(vMir))*.5/cRad));         // balls
+               case 1: return lx.hsb(lxh(),100,c1c(1 - v.dist(p)*.5/cRad));                                                    // ball
                case 2: vMir.set(mMax.x/2,0,mMax.z/2);
-                               return lx.hsb(lxh(),100,c1c(1 - CalcCone(p,v,vMir) * max(.02,.45-val(pSize))));         // spot
+                               return lx.hsb(lxh(),100,c1c(1 - calcCone(p,v,vMir) * max(.02,.45-val(pSize))));         // spot
                }
                return lx.hsb(0,0,0);
        }
@@ -107,28 +107,28 @@ public class Noise extends DPat
                }
        }
 
-       color CalcPoint(xyz P) {
+       color CalcPoint(PVector p) {
                color c = 0;
-               P.rotateZ(mCtr, zSin, zCos);
+               rotateZ(p, mCtr, zSin, zCos);
 
                if (CurAnim == 6 || CurAnim == 7) {
-                       P.setNorm();
+                       setNorm(p);
                        return lx.hsb(lxh(),100, 100 * (
-                                                       constrain(1-50*(1-val(pDensity))*abs(P.y-sin(zTime*10  + P.x*(300))*.5 - .5),0,1) + 
-                       (CurAnim == 7 ? constrain(1-50*(1-val(pDensity))*abs(P.x-sin(zTime*10  + P.y*(300))*.5 - .5),0,1) : 0))
+                                                       constrain(1-50*(1-val(pDensity))*abs(p.y-sin(zTime*10  + p.x*(300))*.5 - .5),0,1) + 
+                       (CurAnim == 7 ? constrain(1-50*(1-val(pDensity))*abs(p.x-sin(zTime*10  + p.y*(300))*.5 - .5),0,1) : 0))
                        );
                }                       
 
-               if (iSymm == XSym && P.x > mMax.x/2) P.x = mMax.x-P.x;
-               if (iSymm == YSym && P.y > mMax.y/2) P.y = mMax.y-P.y;
+               if (iSymm == XSym && p.x > mMax.x/2) p.x = mMax.x-p.x;
+               if (iSymm == YSym && p.y > mMax.y/2) p.y = mMax.y-p.y;
 
                for (int i=0;i<_ND; i++) if (N[i].Active()) {
                        NDat  n     = N[i];
                        float zx    = zTime * n.speed * n.sinAngle,
                                  zy    = zTime * n.speed * n.cosAngle;
 
-                       float b     = (iSymm==RadSym ? noise(zTime*n.speed+n.xoff-P.distance(mCtr)/n.xz)
-                                                                                : noise(P.x/n.xz+zx+n.xoff,P.y/n.yz+zy+n.yoff,P.z/n.zz+n.zoff))
+                       float b     = (iSymm==RadSym ? noise(zTime*n.speed+n.xoff-p.dist(mCtr)/n.xz)
+                                                                                : noise(p.x/n.xz+zx+n.xoff,p.y/n.yz+zy+n.yoff,p.z/n.zz+n.zoff))
                                                        *1.8;
 
                        b +=    n.den/100 -.4 + val(pDensity) -1;
@@ -164,13 +164,13 @@ public class Play extends DPat
        float   zTheta=0;
        ArrayList<rWave> waves = new ArrayList<rWave>(10);
 
-       rAngle  a1              = new rAngle(), a2              = new rAngle(),
-                       a3              = new rAngle(), a4              = new rAngle();
-       xyz             cPrev   = new xyz(), cRand              = new xyz(),
-                       cMid    = new xyz(), V                  = new xyz(),
-                       theta   = new xyz(), tSin               = new xyz(),
-                       tCos    = new xyz(), cMidNorm   = new xyz(),
-                       Pn              = new xyz();
+       rAngle  a1              = new rAngle(), a2                      = new rAngle(),
+                       a3              = new rAngle(), a4                      = new rAngle();
+       PVector cPrev   = new PVector(), cRand          = new PVector(),
+                       cMid    = new PVector(), V                      = new PVector(),
+                       theta   = new PVector(), tSin           = new PVector(),
+                       tCos    = new PVector(), cMidNorm       = new PVector(),
+                       Pn              = new PVector();
        float   LastBeat=3, LastMeasure=3;
        int             curRandTempo = 1, curRandTPat = 1;
        Pick    pTimePattern, pTempoMult, pShape;
@@ -261,7 +261,7 @@ public class Play extends DPat
                }
                
                if (t<LastBeat) {
-                       cPrev.set(cRand); cRand.setRand();
+                       cPrev.set(cRand); setRand(cRand);
                        a1.set(); a2.set(); a3.set(); a4.set();
                } LastBeat = t;
 
@@ -275,17 +275,17 @@ public class Play extends DPat
                        case 6:         t = .5*(1-cos(PI*t));                                   break;  // slide
                }
                
-               cMid.set                (cPrev);        cMid.interpolate        (t,cRand);
-               cMidNorm.set    (cMid);         cMidNorm.setNorm();
+               cMid.set                (cPrev);        interpolate(t,cMid,cRand);
+               cMidNorm.set    (cMid);         setNorm(cMidNorm);
                a1.move(); a2.move(); a3.move(); a4.move();
        }
 
-       color CalcPoint(xyz Px) {
-               if (theta.x != 0) Px.rotateX(mCtr, tSin.x, tCos.x);
-               if (theta.y != 0) Px.rotateY(mCtr, tSin.y, tCos.y);
-               if (theta.z != 0) Px.rotateZ(mCtr, tSin.z, tCos.z);
+       color CalcPoint(PVector Px) {
+               if (theta.x != 0) rotateX(Px, mCtr, tSin.x, tCos.x);
+               if (theta.y != 0) rotateY(Px, mCtr, tSin.y, tCos.y);
+               if (theta.z != 0) rotateZ(Px, mCtr, tSin.z, tCos.z);
                
-               Pn.set(Px); Pn.setNorm();
+               Pn.set(Px); setNorm(Pn);
 
                float mp        = min(Pn.x, Pn.z);
                float yt        = map(t,0,1,.5-bnc/2,.5+bnc/2);
@@ -337,7 +337,7 @@ public class Play extends DPat
 
                case 11:
                                        Px.z=mCtr.z; cMid.z=mCtr.z;
-                                       return lx.hsb(lxh(),100,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                               // cone
+                                       return lx.hsb(lxh(),100,c1c(1 - calcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                               // cone
 
                case 12:        return lx.hsb(lxh() + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200,
                                                85,c1c(Pn.y < noise(Pn.x + NoiseMove/2000.,Pn.z)*(1+amp)-amp/2.-.1 ? 1 : 0));   // noise
@@ -350,7 +350,7 @@ public class Play extends DPat
                default:        return lx.hsb(0,0,0);
                }
 
-               return lx.hsb(lxh(), 100, c1c(1 - V.distance(Pn)/rad));
+               return lx.hsb(lxh(), 100, c1c(1 - V.dist(Pn)/rad));
        }
 }
 //----------------------------------------------------------------------------------------------------------------------------------
@@ -446,17 +446,17 @@ class Worms extends SCPattern {
        private BasicParameter pSpawn     = new BasicParameter("DIR" ,  0);
        private BasicParameter pColor     = new BasicParameter("CLR" ,  .1);
 
-       int     zMidLat = 82;
+       float   zMidLat = 82.;
        float   nConfusion;
        private final Click moveChase = new Click(1000);
 
-       xyz     middle;
+       PVector middle;
        int     AnimNum() { return floor(pSpawn.getValuef()*(4-.01));   }
        float   randX() { return random(model.xMax-model.xMin)+model.xMin; }
        float   randY() { return random(model.yMax-model.yMin)+model.yMin; }
-       xyz     randEdge() { 
-               return random(2) < 1 ?  new xyz(random(2)<1 ? model.xMin:model.xMax, randY(), zMidLat)  :
-                                                               new xyz(randX(), random(2)<1 ? model.yMin:model.yMax, zMidLat)  ;
+       PVector randEdge() { 
+               return random(2) < 1 ?  new PVector(random(2)<1 ? model.xMin:model.xMax, randY(), zMidLat)      :
+                                                               new PVector(randX(), random(2)<1 ? model.yMin:model.yMax, zMidLat)      ;
        }
 
        Worms(GLucose glucose) {
@@ -467,7 +467,7 @@ class Worms extends SCPattern {
            addParameter(pEQ);      addParameter(pConfusion);
                addParameter(pSpawn);   addParameter(pColor);
 
-           middle = new xyz(model.cx, model.cy, 71);
+           middle = new PVector(model.cx, model.cy, 71);
                if (lattice == null) lattice = new dLattice();
                for (int i=0; i<numCursors; i++) { dCursor c = new dCursor(); reset(c); cur.add(c); }
                onParameterChanged(pEQ); setNewDest();
@@ -491,8 +491,8 @@ class Worms extends SCPattern {
 
                        case 1: c.clr = lx.hsb(getClr(),100,100);                               // top to bottom
                                        float xLin = randX();
-                                       c.setDest(lattice.getClosest(new xyz(xLin, 0         , zMidLat)).v, nConfusion);
-                                       c.setCur (lattice.getClosest(new xyz(xLin, model.yMax, zMidLat)));
+                                       c.setDest(lattice.getClosest(new PVector(xLin, 0         , zMidLat)).v, nConfusion);
+                                       c.setCur (lattice.getClosest(new PVector(xLin, model.yMax, zMidLat)));
                                        break;
 
                        case 2: c.clr = lx.hsb(getClr(),100,100); break;                // chase a point around
@@ -500,8 +500,8 @@ class Worms extends SCPattern {
                        case 3: boolean bLeft = random(2)<1;
                                        c.clr = lx.hsb(getClr()+random(120),100,100);                           // sideways
                                        float yLin = randX();
-                                       c.setDest(lattice.getClosest(new xyz(bLeft ? 0 : model.xMax,yLin,zMidLat)).v, nConfusion);
-                                       c.setCur (lattice.getClosest(new xyz(bLeft ? model.xMax : 0,yLin,zMidLat)));
+                                       c.setDest(lattice.getClosest(new PVector(bLeft ? 0 : model.xMax,yLin,zMidLat)).v, nConfusion);
+                                       c.setCur (lattice.getClosest(new PVector(bLeft ? model.xMax : 0,yLin,zMidLat)));
                                        break;
                }
                if (pBlur.getValuef() == 1 && random(2)<1) c.clr = lx.hsb(0,0,0);
@@ -509,7 +509,7 @@ class Worms extends SCPattern {
 
        void setNewDest() {
                if (AnimNum() != 2) return;
-               xyz dest = new xyz(randX(), randY(), zMidLat);
+               PVector dest = new PVector(randX(), randY(), zMidLat);
                for (int i=0; i<numCursors; i++) {
                        cur.get(i).setDest(lattice.getClosest(dest).v, nConfusion);
                        cur.get(i).clr = lx.hsb(getClr()+75,100,100);   // chase a point around
index 30ae8945b7c574238da64e80436ada4fc3788a88..f0cc7067f53c4f14e70d668d418c0bd2dd7edfbf 100644 (file)
@@ -1,5 +1,4 @@
 //----------------------------------------------------------------------------------------------------------------------------------
-xyz                    mMax, mCtr, mHalf;
 int                    NumApcRows=4, NumApcCols=8;
 
 boolean btwn   (int            a,int    b,int          c)              { return a >= b && a <= c;      }
@@ -22,7 +21,6 @@ float         distToSeg(float x, float y, float x1, float y1, float x2, float y2) {
        return sqrt(dx * dx + dy * dy);
 }
 
-
 public class Pick {
        int     NumPicks, Default       ,       
                        CurRow  , CurCol        ,
@@ -57,81 +55,47 @@ public class DBool {
                def = _def; b = _def; tag = _tag; row = _row; col = _col;
        }
 }
-
-//----------------------------------------------------------------------------------------------------------------------------------
-public class xyz {     float x,y,z;    // extends pVector; eliminate half of the functions
-                       xyz() {x=y=z=0;}
-                       xyz(Point p                                       ) {x=p.x      ; y=p.y; z=p.z;}
-                       xyz(xyz p                                         ) {set(p);                             }
-                       xyz(float _x,float _y,float _z) {x=_x   ; y=_y  ; z=_z  ;}
-       void    set(Point p                                       ) {x=p.x      ; y=p.y; z=p.z;}
-       void    set(xyz p                                         ) {x=p.x      ; y=p.y ; z=p.z ;}
-       void    set(float _x,float _y,float _z) {x=_x   ; y=_y  ; z=_z  ;}
-
-       void    zoomX   (float zx)                              {x = x*zx - mMax.x*(zx-1)/2;                            }
-       void    zoomY   (float zy)                              {y = y*zy - mMax.y*(zy-1)/2;                            }
-
-       float   distance(xyz b)                                 {return dist(x,y,z,b.x,b.y,b.z);                }
-       float   distance(float _x, float _y)    {return dist(x,y,_x,_y);                                }
-       float   dot     (xyz b)                                 {return x*b.x + y*b.y + z*b.z;                  }
-       void    add             (xyz b)                                 {x += b.x; y += b.y; z += b.z;                  }
-       void    add             (float b)                               {x += b  ; y += b  ; z += b  ;                  }
-       void    subtract(xyz b)                                 {x -= b.x; y -= b.y; z -= b.z;                  }
-       void    scale   (float b)                               {x *= b  ; y *= b  ; z *= b  ;                  }
-
-       void    rotateZ   (xyz o, float nSin, float nCos) {
-               float nX = nCos*(x-o.x) - nSin*(y-o.y) + o.x;
-               float nY = nSin*(x-o.x) + nCos*(y-o.y) + o.y;
-               x = nX; y = nY;
-       }
-
-       void    rotateX   (xyz o, float nSin, float nCos) {
-               float nY = nCos*(y-o.y) - nSin*(z-o.z) + o.y;
-               float nZ = nSin*(y-o.y) + nCos*(z-o.z) + o.z;
-               y = nY; z = nZ;
-       }
-
-       void    rotateY   (xyz o, float nSin, float nCos) {
-               float nZ = nCos*(z-o.z) - nSin*(x-o.x) + o.z;
-               float nX = nSin*(z-o.z) + nCos*(x-o.x) + o.x;
-               z = nZ; x = nX;
-       }
-
-       void    setRand ()                                              { x = random(mMax.x); y = random(mMax.y); z = random(mMax.z);   }
-       void    setNorm ()                                              { x /= mMax.x; y /= mMax.y; z /= mMax.z;                                                }
-       void    interpolate(float i, xyz d)             { x = interp(i,x,d.x); y = interp(i,y,d.y); z = interp(i,z,d.z); }
-}
 //----------------------------------------------------------------------------------------------------------------------------------
 public class DPat extends SCPattern
 {
        ArrayList<Pick>   picks  = new ArrayList<Pick>  ();
        ArrayList<DBool>  bools  = new ArrayList<DBool> ();
 
+       PVector         mMax, mCtr, mHalf;
+
        MidiOutput  APCOut;
        int                     nMaxRow         = 53;
-       float           LastQuant       = -1, LastJog = -1;
+       float           LastJog = -1;
        float[]         xWaveNz, yWaveNz;
        int             nPoint  , nPoints;
-       xyz                     xyzJog = new xyz(), vT1 = new xyz(), vT2 = new xyz();
-       xyz                     modmin;
+       PVector         xyzJog = new PVector(), modmin;
 
        float                   NoiseMove       = random(10000);
        BasicParameter  pSpark, pWave, pRotX, pRotY, pRotZ, pSpin, pTransX, pTransY;
        DBool                   pXsym, pYsym, pRsym, pXdup, pXtrip, pJog, pGrey;
 
-       float           lxh             ()                                                      { return lx.getBaseHuef();                                      }
-       int                     c1c              (float a)                                      { return round(100*constrain(a,0,1));           }
-       float           interpWv(float i, float[] vals)         { return interp(i-floor(i), vals[floor(i)], vals[ceil(i)]); }
-
-       float           CalcCone (xyz v1, xyz v2, xyz c)        { vT1.set(v1); vT2.set(v2); vT1.subtract(c); vT2.subtract(c);
-                                                                                                               return degrees( acos ( vT1.dot(vT2) / (sqrt(vT1.dot(vT1)) * sqrt(vT2.dot(vT2)) ) ));    }
-
-       void            StartRun(double deltaMs)                        { }
-       color           CalcPoint(xyz p)                                        { return lx.hsb(0,0,0); }
-       color           blend3(color c1, color c2, color c3){ return blendColor(c1,blendColor(c2,c3,ADD),ADD); }
-       float           val             (BasicParameter p)                      { return p.getValuef(); }
-
-       BasicParameter  addParam(String label, double value) { return new BasicParameter(label, value); }
+       float           lxh             ()                                                                      { return lx.getBaseHuef();                                                                                      }
+       int                     c1c              (float a)                                                      { return round(100*constrain(a,0,1));                                                           }
+       float           interpWv(float i, float[] vals)                         { return interp(i-floor(i), vals[floor(i)], vals[ceil(i)]);             }
+       void            setNorm (PVector vec)                                           { vec.set(vec.x/mMax.x, vec.y/mMax.y, vec.z/mMax.z);                            }
+       void            setRand (PVector vec)                                           { vec.set(random(mMax.x), random(mMax.y), random(mMax.z));                      }
+       void            setVec  (PVector vec, Point p)                          { vec.set(p.x, p.y, p.z);                                                                                       }
+       void            interpolate(float i, PVector a, PVector b)      { a.set(interp(i,a.x,b.x), interp(i,a.y,b.y), interp(i,a.z,b.z));       }
+       void            StartRun(double deltaMs)                                        { }
+       float           val             (BasicParameter p)                                      { return p.getValuef();                                                                                         }
+       color           CalcPoint(PVector p)                                            { return lx.hsb(0,0,0);                                                                                         }
+       color           blend3(color c1, color c2, color c3)            { return blendColor(c1,blendColor(c2,c3,ADD),ADD);                                      }
+
+       void    rotateZ (PVector p, PVector o, float nSin, float nCos) { p.set(    nCos*(p.x-o.x) - nSin*(p.y-o.y) + o.x    , nSin*(p.x-o.x) + nCos*(p.y-o.y) + o.y,p.z); }
+       void    rotateX (PVector p, PVector o, float nSin, float nCos) { p.set(p.x,nCos*(p.y-o.y) - nSin*(p.z-o.z) + o.y    , nSin*(p.y-o.y) + nCos*(p.z-o.z) + o.z    ); }
+       void    rotateY (PVector p, PVector o, float nSin, float nCos) { p.set(    nSin*(p.z-o.z) + nCos*(p.x-o.x) + o.x,p.y, nCos*(p.z-o.z) - nSin*(p.x-o.x) + o.z    ); }
+
+       BasicParameter  addParam(String label, double value) { BasicParameter p = new BasicParameter(label, value); addParameter(p); return p; }
+
+       PVector         vT1 = new PVector(), vT2 = new PVector();
+       float           calcCone (PVector v1, PVector v2, PVector c)    {       // use vec.angleBetween() for this
+                                                                       vT1.set(v1); vT2.set(v2); vT1.sub(c); vT2.sub(c);
+                                                                       return degrees(PVector.angleBetween(vT1,vT2)); }
 
        Pick            addPick(String name, int def, int _max, String[] desc) {
                Pick P          = new Pick(name, def, _max+1, nMaxRow, desc); 
@@ -181,10 +145,10 @@ public class DPat extends SCPattern
                pJog            =       new DBool("JOG"  , false, 48, 4);       bools.add(pJog  );
                pGrey           =       new DBool("GREY" , false, 48, 5);       bools.add(pGrey );
 
-               modmin          =       new xyz(model.xMin, model.yMin, model.zMin);
-               mMax            =       new xyz(model.xMax, model.yMax, model.zMax); mMax.subtract(modmin);
-               mCtr            =       new xyz(mMax); mCtr.scale(.5);
-               mHalf           =       new xyz(.5,.5,.5);
+               modmin          =       new PVector(model.xMin, model.yMin, model.zMin);
+               mMax            =       new PVector(model.xMax, model.yMax, model.zMax); mMax.sub(modmin);
+               mCtr            =       new PVector(); mCtr.set(mMax); mCtr.mult(.5);
+               mHalf           =       new PVector(.5,.5,.5);
                xWaveNz         =       new float[ceil(mMax.y)+1];
                yWaveNz         =       new float[ceil(mMax.x)+1];
 
@@ -218,8 +182,8 @@ public class DPat extends SCPattern
 
                NoiseMove       += deltaMs; NoiseMove = NoiseMove % 1e7;
                StartRun                (deltaMs);
-               xyz P                   = new xyz(), tP = new xyz(), pSave = new xyz();
-               xyz pTrans              = new xyz(val(pTransX)*200-100, val(pTransY)*100-50,0);
+               PVector P               = new PVector(), tP = new PVector(), pSave = new PVector();
+               PVector pTrans  = new PVector(val(pTransX)*200-100, val(pTransY)*100-50,0);
                nPoint  = 0;
 
                if (pJog.b) {
@@ -239,9 +203,9 @@ public class DPat extends SCPattern
                }
 
                for (Point p : model.points) { nPoint++;
-                       P.set(p);
-                       P.subtract(modmin);
-                       P.subtract(pTrans);
+                       setVec(P,p);
+                       P.sub(modmin);
+                       P.sub(pTrans);
                        if (sprk  > 0) {P.y += sprk*randctr(50); P.x += sprk*randctr(50); P.z += sprk*randctr(50); }
                        if (wvAmp > 0)  P.y += interpWv(p.x-modmin.x, yWaveNz);
                        if (wvAmp > 0)  P.x += interpWv(p.y-modmin.y, xWaveNz);
@@ -311,7 +275,7 @@ class dLattice {
        dVertex v0(Strip s) { return (dVertex)s.obj1; }
        dVertex v1(Strip s) { return (dVertex)s.obj2; }
 
-       dPixel getClosest(xyz p) {
+       dPixel getClosest(PVector p) {
                dVertex v = null; int pos=0; float d = 500;
 
                for (Strip s : glucose.model.strips) {