C#计算两个0-360°角度间的0-180°相对夹角
相对夹角计算与航速转换实现
需求说明
- 计算两个给定角度间的最短路径有符号相对夹角,范围限定在-180°到180°
- 示例:
- 角度A:280°,角度B:80°,相对夹角为160°
- 角度A:200°,角度B:10°,相对夹角为170°
相对夹角计算函数
实现了GetRelativeAngle函数用于计算该夹角,起初运行出现问题,但未修改代码后恢复正常:
float GetRelativeAngle(float mainAngle, float secondaryAngle) { float rel = ((secondaryAngle - mainAngle + 180) % 360) - 180; if (rel < -180) { rel += 360; } return rel; }
航速转换逻辑
该函数用于计算船舶航向与风向的相对夹角,进而通过GetSpeedFromWindAngle函数将夹角转换为0-1范围的magnitudeAngle,最终通过曲线评估获取航速:
public float GetSpeedFromWindAngle(float mastAngle, bool isSquare) { float angle = GetRelativeAngle(mastAngle, _windAngle); float absAngle = Mathf.Abs(angle); float magnitudeAngle = absAngle / 180; float speedfromAngle = 0f; if (isSquare) speedfromAngle = _speedFromWindAngleCurveSquares.Evaluate(magnitudeAngle); else speedfromAngle = _speedFromWindAngleCurveStays.Evaluate(magnitudeAngle); return speedfromAngle; }
- 注:仅需将夹角绝对值转换为0-1范围的数值,不关心夹角的正负。
内容的提问来源于stack exchange,提问作者user20494201
相关产品推荐
相关产品推荐

