使用余弦定律求解三角形

hey*_*red 2 c# geometry trigonometry

我正在寻找一个三角形,我知道三边的长度(一个SSS三角形).因此,我想确定由3条线组成的形状的3个"内"角是否= 180.如果是,则形状必须是三角形.

我正在使用此Cosines 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

我正在使用C#(XNA)对我的应用程序进行编码,我不确定我是否正确使用了MathHelper.ToDegrees方法.

Jer*_*myP 5

法律是

c 2 = a 2 + b 2 - 2abcos(C)

重新排列:

cos(C)=(a 2 + b 2 -c 2)/ 2ab

C = cos -1 [(a 2 + b 2 -c 2)/ 2ab]

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

无论如何,这是你的一个错误,正如其他人所说的那样,你正在使用浮点数,因此由于舍入错误,比较相等是有​​点击中和错过.

此外,您不需要转换回180度degees == pi弧度.

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

(a 2 + b 2 -c 2)/ 2ab> 1或<-1

事实上,我怀疑上述公式的条件是在正确的范围内

c <= a + b