C# 三角函数(求助!)

C# Trigonometry (HELP!)

好的,情况是这样的...

我目前正在为我的游戏数学和物理项目工作 class。

我完成了我的解决方案的编码,运行 我的老师为我们做的 xUnit 测试。

其中 90% 都失败了。

我有一个 Calculator.cs 文件,其中包含我编写的所有方法。每个三角函数方法都是针对 return 一个 元组 ,然后元组的项用于 xUnit.Assert.Equal(expectedResult, Math.Round(calculatorTuple.Item1, 4))...

例如...我有一个名为 Trig_Calculate_Adjacent_Hypotenuse 的方法,它接受两个双精度数作为参数(角度和对角)

计算器发现Adjacent等于15.4235... 但我的实际计算表明它是 56.7128。 因此,当测试运行时,它执行 Assert.Equal(56.7128, 15.4235) 并发现这两个答案不相等。 (显然)

我多次查看 Calculator.cs 文件中的代码...我怎么也找不到问题

这是我的方法,您可以看看:

public static Tuple<double,double> Trig_Calculate_Adjacent_Hypotenuse(double Angle, double Opposite)
    {
        double Hypotenuse;
        double Adjacent;
        // SOH CAH TOA

        // Using TOA to find Adjacent
        // so Adjacent = Opposite / Tan(Angle)
        // so Adjacent = 10 / Tan(10)
        // which means Adjacent = 56.7128
        // However my calculator finds 15.4235 instead...
        Adjacent = Opposite / Math.Tan(Calculator.DegreesToRadians(Angle));

        // Using SOH to find Hypotenuse
        // so Hypotenuse = Opposite / Sin(Angle)
        // so Hypotenuse = 10 / Sin(10)
        // which means Hypotenuse = 57.5877
        // However my calculator finds something different... (unknown due to Adjacent's failure)
        Hypotenuse = Opposite / Math.Sin(Calculator.DegreesToRadians(Angle));

        return new Tuple<double, double>(Adjacent, Hypotenuse);
    }

测试方法如下:

        [Theory]
    // Student Data
    [InlineData(10, 10, 56.7128, 57.5877)]
    public void TestCalculateAdjacentHypotenuse(double Angle, double Opposite, double Adjacent, double Hypotenuse)
    {
        // Act - performing the action
        Tuple<double, double> results = Calculator.Trig_Calculate_Adjacent_Hypotenuse(Angle, Opposite);

        // Assert - did we get back the correct answer
        Assert.Equal(Adjacent, Math.Round(results.Item1, 4));
        Assert.Equal(Hypotenuse, Math.Round(results.Item2, 4));
    }

希望大家帮我看看是什么问题! :)

谢谢!

Math.Tan(Angle) 适用于弧度,不适用于度数(另外 Sin()Cos() 适用于弧度)。

尝试Math.Tan(Angle * Math.PI / 180);