1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include "stdafx.h"
#include "Angle.h"
#include "Str.h"
#include "Point.h"
#include "Core/StrBuf.h"
namespace storm {
namespace geometry {
Angle Angle::normalized() const {
Int sub = Int(floor(v / (2 * M_PI)));
return Angle(v - Float(sub * (2 * M_PI)));
}
Angle Angle::opposite() const {
return Angle(Float(v + M_PI)).normalized();
}
wostream &operator <<(wostream &to, Angle a) {
return to << a.deg() << L" deg";
}
void Angle::toS(StrBuf *to) const {
*to << deg() << S(" deg");
}
Angle deg(Float v) {
return Angle(float(v * M_PI / 180.0));
}
Angle rad(Float v) {
return Angle(v);
}
Angle operator +(Angle a, Angle b) {
return Angle(a.rad() + b.rad());
}
Angle operator -(Angle a, Angle b) {
return Angle(a.rad() - b.rad());
}
Angle operator -(Angle a) {
return Angle(-a.rad());
}
Angle operator *(Angle a, Float b) {
return Angle(a.rad() * b);
}
Angle operator *(Float a, Angle b) {
return Angle(a * b.rad());
}
Angle operator /(Angle a, Float b) {
return Angle(a.rad() / b);
}
Float sin(Angle v) {
return ::sin(v.rad());
}
Float cos(Angle v) {
return ::cos(v.rad());
}
Float tan(Angle v) {
return ::tan(v.rad());
}
Angle asin(Float v) {
return rad(::asin(v));
}
Angle acos(Float v) {
return rad(::acos(v));
}
Angle atan(Float v) {
return rad(::atan(v));
}
Angle angle(Point pt) {
return rad(::atan2(pt.x, -pt.y));
}
}
}
|