2017-01-19 25 views
-4

Ok так вот ситуация ...C# Тригонометрия (HELP!)

Я сейчас работаю над проектом для моей математики и физики для класса игр.

Я закончил кодирование своего решения и провел тесты xUnit, которые мой учитель сделал для нас.

90% из них сбой.

У меня есть Calculator.cs файл, содержащий все методы, которые я закодировал. Каждый тригонометрический метод сделан, чтобы вернуть Tuple, и элементы, которые в кортеже затем используются в xUnit.Assert.Equal (expectedResult, Math.Round (calculatorTuple.Item1, 4)) ...

Для пример ... у меня есть метод, названный Trig_Calculate_Adjacent_Hypotenuse, который принимает два двойников, как это параметры (угол в градусах и напротив)

Калькулятор обнаруживает, что соседнее равно 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)); 
    } 

Я надеюсь, что вы, ребята, можете помочь мне выяснить, в чем проблема! :)

Спасибо!

+0

Не связывайте изображения, вставьте соответствующий код непосредственно в вопрос. – Quantic

+0

Пожалуйста, прочитайте http://stackoverflow.com/help/how-to-ask. –

+1

'Math.Tan (Angle)' работает с радианами, а не с градусами. Вы считали это? Попробуйте 'Math.Tan ((Angle * 3.14)/180);' –

ответ

5

Math.Tan(Angle) Работы с радианами, не со степенями (также Sin(), Cos() Работа с радианами).

Попробуйте Math.Tan(Angle * Math.PI/180);

+1

Почему бы не использовать 'Math.PI' вместо' 3.14'? – Kyle

+0

@Kyle. спасибо, я отредактировал мой ответ –

+0

Спасибо! Я не понимал, что ... Я чувствую себя глупо сейчас, ха-ха. Но по крайней мере теперь я знаю! :) –

 Смежные вопросы

  • Нет связанных вопросов^_^