//************************************************************************ //**** 2D POINTS AND VECTOR CLASSES, Jarek Rossignac, Oct 2005 //************************************************************************ class disk {pt C; float r; // CREATE, COPY disk (pt pC, float pr) {C=pC; r = pr;}; disk makeCopy() {return(new disk(C,r));}; void setFromValues(float px, float py, float pr) {C.x = px; C.y = py; r=pr;}; void setFromMouse() { C.x = mouseX; C.y = mouseY; }; // DISPLAY, PRINT void show() { ellipse(C.x, C.y, 2*r, 2*r); }; void label(String s, vec D) {text(s, C.x+D.x,C.y+D.y); }; void write() {println("("+C.x+","+C.y+"):"+r);}; //INTERACT boolean picked() {boolean mouseIsIn=false; if (C.disTo(Mouse)width)||(y<0)||(y>height)));}; float disTo(pt P) {return(sqrt(sq(P.x-x)+sq(P.y-y))); }; // MAKE VECTOR vec vecTo(pt P) {return(new vec(P.x-x,P.y-y)); }; vec vecToMid (pt P, pt Q) {return(new vec((P.x+Q.x)/2.0-x,(P.y+Q.y)/2.0-y)); }; vec vecToBisect (pt P, pt Q) { float a=sqrt(sq(P.x-x)+sq(P.y-y)); float b=sqrt(sq(x-Q.x)+sq(y-Q.y)); return(new vec((b*P.x+a*Q.x)/(a+b)-x,(a*P.y+b*Q.y)/(a+b)-y)); }; // COLLISION void outOfDisk(disk D) { float d=this.disTo(D.C); if (d0.000001) {x/=n; y/=n;};}; void left() {float w=x; x=-y; y=w;}; void back() {x= -this.x; y= -this.y;}; } vec average(vec U, vec V) {return(new vec((U.x+V.x)/2,(U.y+V.y)/2)); }; float dot(vec U, vec V) {return(U.x*V.x+U.y*V.y); };