如何实现cos inverse(反余弦)计算 余弦定理求角的C#代码问题
反余弦功能实现方案(C#)
C# 系统类库中的 Math 类已经内置了反余弦方法,名为 Math.Acos(),你原来的代码混淆了正余弦和反余弦的调用逻辑:Math.Cos 是输入弧度值求对应余弦值,而你的需求是输入余弦比值求对应角度,刚好是逆运算,直接替换方法即可。
调整后的实现代码
// 第一步:用余弦定理计算出目标角的余弦值 double cosOfAngle = (DeltaY * DeltaY + Hyp * Hyp - DeltaX * DeltaX) / (2 * Hyp * DeltaY); // 可选但推荐:浮点数计算可能存在精度误差,将值钳位到[-1,1]区间,避免返回NaN // 若运行环境不支持Math.Clamp,可替换为 cosOfAngle = Math.Max(-1.0, Math.Min(1.0, cosOfAngle)); cosOfAngle = Math.Clamp(cosOfAngle, -1.0, 1.0); // 第二步:调用反余弦方法得到弧度制角度 float angleRadian = (float)Math.Acos(cosOfAngle); // 若需要角度制结果,补充转换逻辑即可 float angleDegree = (float)(angleRadian * 180 / Math.PI);
注意事项
Math.Acos的返回值为弧度制,范围在 [0, π] 之间,符合余弦定理计算三角形内角的场景- 必须确保传入
Math.Acos的参数落在 [-1, 1] 区间内,否则方法会返回非数值(NaN),加钳位逻辑可以避免浮点数精度问题导致的异常
内容的提问来源于stack exchange,提问作者Otto Francis
相关产品推荐
相关产品推荐

