34 lines
881 B
Plaintext
34 lines
881 B
Plaintext
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()) }
|
|
}
|