class Vector{ var length,angle; // polar coordinates, radians fcn init(length,angle){ // angle in degrees self.length,self.angle = vm.arglist.apply("toFloat"); self.angle=self.angle.toRad(); } fcn toXY{ length.toRectangular(angle) } // math is done in place fcn __opAdd(vector){ x1,y1:=toXY(); x2,y2:=vector.toXY(); length,angle=(x1+x2).toPolar(y1+y2); self } fcn __opSub(vector){ x1,y1:=toXY(); x2,y2:=vector.toXY(); length,angle=(x1-x2).toPolar(y1-y2); self } fcn __opMul(len){ length*=len; self } fcn __opDiv(len){ length/=len; self } fcn print(msg=""){ #<<< "Vector%s: Length: %f Angle: %f\Ub0; X: %f Y: %f" #<<< .fmt(msg,length,angle.toDeg(),length.toRectangular(angle).xplode()) .println(); } fcn toString{ "Vector(%f,%f\Ub0;)".fmt(length,angle.toDeg()) } }