-float xdMax,ydMax,zdMax;
-int NumApcRows = 5, NumApcCols = 8;
-
-boolean btwn (int a,int b,int c) { return a >= b && a <= c; }
-boolean btwn (double a,double b,double c) { return a >= b && a <= c; }
-
-public class Pick {
- Pick (String label, int _Def, int _Max, String d[]) { NumPicks=_Max; Default = _Def; tag=label; Desc = d; }
- int Cur() { return (CurRow-StartRow)*NumApcCols + CurCol; }
- int NumPicks, Default, CurRow, CurCol, StartRow, EndRow;
- String Desc[] ;
- String tag ;
-}
-//----------------------------------------------------------------------------------------------------------------------------------
-public class _DhP extends BasicParameter {
- double dflt;
- _DhP (String label, double value) { super(label,value); dflt=value; }
- void Set (double value) { super.setValue(value); }
- void reset () { super.setValue(dflt); }
- float Val () { return getValuef(); }
- boolean ZeroOrOne () { return Val()==0 || Val() == 1; }
-}
-//----------------------------------------------------------------------------------------------------------------------------------
-public class xyz { float x,y,z;
- xyz() {x=y=z=0;}
- xyz(Point p ) {x=p.fx ; y=p.fy; z=p.fz;}
- xyz(float _x,float _y,float _z) {x=_x ; y=_y ; z=_z ;}
- void set(Point p ) {x=p.fx ; y=p.fy; z=p.fz;}
- void set(float _x,float _y,float _z) {x=_x ; y=_y ; z=_z ;}
- float distance(xyz b) {return dist(x,y,z,b.x,b.y,b.z); }
- float dot (xyz b) {return x*b.x + y*b.y + z*b.z; }
- xyz minus (xyz b) {return new xyz(x-b.x,y-b.y,z-b.z); }
- xyz plus (xyz b) {return new xyz(x+b.x,y+b.y,z+b.z); }
- xyz plus (float b) {return new xyz(x+b ,y+b ,z+b ); }
- xyz over (xyz b) {return new xyz(x/b.x,y/b.y,z/b.z); }
- xyz times (float b) {return new xyz(x*b ,y*b ,z*b ); }
- boolean isZero () {return x==0 && y==0 && z==0; }
-
- 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;
- }
-
- xyz setRand () { return new xyz ( random(xdMax), random(ydMax), random(zdMax)); }
- xyz setNorm () { return new xyz ( x / xdMax, y / ydMax, z / zdMax); }
+int NumApcRows=4, NumApcCols=8;
+
+boolean btwn (int a,int b,int c) { return a >= b && a <= c; }
+boolean btwn (double a,double b,double c) { return a >= b && a <= c; }
+float interp (float a, float b, float c) { return (1-a)*b + a*c; }
+float randctr (float a) { return random(a) - a*.5; }
+float min (float a, float b, float c, float d) { return min(min(a,b),min(c,d)); }
+float pointDist(LXPoint p1, LXPoint p2) { return dist(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z); }
+float xyDist (LXPoint p1, LXPoint p2) { return dist(p1.x,p1.y,p2.x,p2.y); }
+float distToSeg(float x, float y, float x1, float y1, float x2, float y2) {
+ float A = x - x1, B = y - y1, C = x2 - x1, D = y2 - y1;
+ float dot = A * C + B * D, len_sq = C * C + D * D;
+ float xx, yy,param = dot / len_sq;