三角形角度计算代码仅对边长5有效,其余输入返回NaN问题排查
问题分析与修复
你遇到的NaN问题核心是运算顺序错误,完全违背了余弦定理的公式逻辑。
错误根源
余弦定理的正确公式为:
cos(a) = (b² + c² - a²) / (2bc)
但你的代码里,分母部分写成了/2 * length2 * length3——由于乘法和除法是同级运算,会从左到右执行,实际计算变成了:(分子 / 2) * length2 * length3
这会导致结果远远超出acosf()函数的定义域[-1, 1],函数直接返回NaN(非数值)。
以输入边长5、4、3计算angle2为例:
分子 = 5² + 3² - 4² = 25+9-16=18
错误计算逻辑:18/2 53 =9*15=135,显然135不在[-1,1]范围内,acosf(135)自然返回NaN。
修复后的代码
给分母的2*b*c加上括号,确保先计算乘积再做除法:
angle1 = acosf((powf(length2,2) + powf(length3,2) - powf(length1,2)) / (2 * length2 * length3)) * 180 / 3.14153f; angle2 = acosf((powf(length1,2) + powf(length3,2) - powf(length2,2)) / (2 * length1 * length3)) * 180 / 3.14153f; angle3 = 180.0f - (angle2 + angle1);
验证结果
输入边长5、4、3时,修复后的代码会输出符合直角三角形规律的结果:
angle one is 90.0018 angle two is 53.1301 angle three is 36.8681
内容的提问来源于stack exchange,提问作者garyK42
相关产品推荐
相关产品推荐

