diff --git a/include/Angle.h b/include/Angle.h index 0220b40..b46cfac 100644 --- a/include/Angle.h +++ b/include/Angle.h @@ -14,6 +14,11 @@ class Angle { static float Clamp(float angle, float min, float max); static float Difference(float a, float b); static float MoveTowards(float fromAngle, float toAngle, float maxAngle); + + static float CosineRuleSide(float a, float b, float gamma); + static float CosineRuleAngle(float a, float b, float c); + + static float SineRuleAngle(float a, float beta, float c); }; #endif \ No newline at end of file diff --git a/src/Angle.cpp b/src/Angle.cpp index 4f68d3f..db0097d 100644 --- a/src/Angle.cpp +++ b/src/Angle.cpp @@ -37,3 +37,23 @@ float Angle::MoveTowards(float fromAngle, float toAngle, float maxAngle) { d = sign * Float::Clamp(fabs(d), 0, maxAngle); return fromAngle + d; } + +float Angle::CosineRuleSide(float a, float b, float gamma) { + float a2 = a * a; + float b2 = b * b; + float c = sqrtf(a2 + b2 - 2 * a * b * cos(gamma * Angle::Deg2Rad)); + return c; +} + +float Angle::CosineRuleAngle(float a, float b, float c) { + float a2 = a * a; + float b2 = b * b; + float c2 = c * c; + float gamma = acos((a2 + b2 - c2) / (2 * a * b)) * Angle::Rad2Deg; + return gamma; +} + +float Angle::SineRuleAngle(float a, float beta, float b) { + float alpha = asin(a * sin(beta * Angle::Deg2Rad) / b); + return alpha; +} \ No newline at end of file