/***************************** * Vec class and functions * *****************************/ class Vec { double x=0,y=0,z=0; Vec() { } Vec(double _x, double _y, double _z) { x=_x; y=_y; z=_z; } Vec(Vec _v) { x=_v.x; y=_v.y; z=_v.z; } void setVec(Vec _v) { x=_v.x; y=_v.y; z=_v.z; } void setVec(double _x, double _y, double _z) { x=_x; y=_y; z=_z; } double len() { return Math.sqrt(x*x+y*y+z*z); } double lenSQ() { return (x*x+y*y+z*z); } void gravitateTo(Vec _to, double _mgd, double _fFac) { double minGravDist2=_mgd*_mgd; double dx=_to.x-x; double dy=_to.y-y; double dz=_to.z-z; double d2=dx*dx+dy*dy+dz*dz; if (d2=ma) x-=ra; } void constrY(double mi, double ma) { double ra=ma-mi; while (y=ma) y-=ra; } } Vec vecAdd(Vec a, Vec b) { Vec out=new Vec(a); out.add(b); return out; } Vec vecSub(Vec a, Vec b) { Vec out=new Vec(a); out.sub(b); return out; } Vec vecMul(Vec a, double b) { Vec out=new Vec(a); out.mul(b); return out; } Vec vecDiv(Vec a, double b) { Vec out=new Vec(a); out.div(b); return out; } double vecLen(Vec a) { return a.len(); } Vec vecRotY(Vec a, double rd) { Vec out=new Vec(a); out.rotY(rd); return out; } Vec rndDirVec(double r) { Vec out=new Vec(0,0,r); out.rotX(random(-PI/2.0,PI)); out.rotZ(random(0,2*PI)); return out; } Vec rndPlusMinVec(double s) { Vec out=new Vec(-s+2*s*Math.random(),-s+2*s*Math.random(),-s+2*s*Math.random()); return out; } void vecSwap(Vec v1, Vec v2) { Vec t=new Vec(v1); v1.setVec(v2); v2.setVec(t); } /***************************** * adapted 3d functions to Vec *****************************/ void vecTranslate(Vec v) { translate((float)v.x,(float)v.y,(float)v.z); } void vecVertex(Vec v) { vertex((float)v.x,(float)v.y,(float)v.z); } void vecLine(Vec a, Vec b) { line((float)a.x,(float)a.y,(float)a.z,(float)b.x,(float)b.y,(float)b.z); } void vecRect(Vec a, Vec b) { rect((float)a.x,(float)a.y,(float)b.x,(float)b.y); } void vecCamera(Vec eye, Vec cen, Vec upaxis) { camera((float)eye.x,(float)eye.y,(float)eye.z,(float)cen.x,(float)cen.y,(float)cen.z,(float)upaxis.x,(float)upaxis.y,(float)upaxis.z); }