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);
好的,情况是这样的...
我目前正在为我的游戏数学和物理项目工作 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);