// We store the angle in clockwise radians for more efficient // calculations. // So 0=right, pi=down etc. persistable sclass Angle { double radians; *(double *radians) {} // Create angle from x/y ratio *(double x, double y) { radians = atan2(x, y); } static Angle fromRadians(double radians) { ret new Angle(radians); } static Angle fromDegrees(double degrees) { ret new Angle(degreesToRadians(degrees); } double radians() { ret radians; } double degrees() { ret radiansToDegrees(radians); } double x() { ret cos(radians); } double y() { ret sin(radians); } toString { ret formatDouble(degrees(), 1) + "°"; } }