gpt4 book ai didi

c# - 使用余弦定律求解三角形

转载 作者:行者123 更新时间:2023-11-30 19:30:11 25 4
gpt4 key购买 nike

我想求解一个三角形,我知道它的 3 条边的长度(SSS 三角形)。因此,我想确定由 3 条线组成的形状的 3 个“内”角是否 = 180。如果是,则该形状必须是三角形。

我正在使用在这个 The Law of Cosines 上找到的公式页来解决的角度。在我的代码中,我执行以下操作:

private bool CalculateIfTriangle(float line1Length, float line2Length, float line3Length)
{
double angle1 = MathHelper.ToDegrees((float)Math.Cos(((line2Length * line2Length) + (line3Length * line3Length) - (line1Length * line1Length)) / (2 * line2Length * line3Length)));
double angle2 = MathHelper.ToDegrees((float)Math.Cos(((line3Length * line3Length) + (line1Length * line1Length) - (line2Length * line2Length)) / (2 * line3Length * line1Length)));
double angle3 = MathHelper.ToDegrees((float)Math.Cos(((line1Length * line1Length) + (line2Length * line2Length) - (line3Length * line3Length)) / (2 * line1Length * line2Length)));

double total = angle1 + angle2 + angle3;
if (total == 180)
return true;
else return false;
}

但是,我没有得到正确的答案(即使形状肯定是三角形)。

我正在用 C# (XNA) 编写我的应用程序,但我不确定我是否正确使用了 MathHelper.ToDegrees 方法。

最佳答案

法律是

c2 = a2 + b2 - 2abcos(C)

重新排列:

cos(C) = (a2 + b2 - c2)/2ab

C = cos-1 [(a2 + b2 - c2)/2ab]

那么你为什么要使用 Math.Cos而不是 Math.Acos?

无论如何,正如其他人所说,这是您的错误之一,您使用的是 float ,因此由于舍入错误,比较相等性有点碰运气。

此外,您不需要将度数转换回 180 degees == pi radians。

另外,你只需要比较边的长度。在真正的三角形中,一侧的长度总是比另一侧的长度之和短(参见罗林的回答)。我怀疑,您的公式可能会给出 NaN 作为非三角形的答案,因为您最终会尝试获取不在 [-1 .. 1] 范围内的数字的 cos-1。即

(a2 + b2 - c2)/2ab > 1 或 < -1

其实我怀疑上面的公式在合适范围内的条件恰好是在什么时候

c <= a + b

关于c# - 使用余弦定律求解三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9784788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com