Added cosine/sine rules

This commit is contained in:
Pascal Serrarens 2023-01-25 15:46:11 +01:00
parent 1707751bf3
commit 6b75707a2e
2 changed files with 25 additions and 0 deletions

View File

@ -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

View File

@ -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;
}