2016-01-03 5 views
1

Я пытаюсь вычислить угол наклона солнца с использованием заданного алгоритма.Расчет угла наклона

Я портирован код Java здесь на so на C#, и это дает мне правильный результат: около -22,89

Моя проблема, я хочу, чтобы реализовать this алгоритм, но я получаю неправильный результат (приблизительно -11,65).

Я создал WinForm приложение для тестирования это:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private int DayNumber 
    { 
     get 
     { 
      return DateTime.Now.DayOfYear; 
     } 
    } 

    private double CalculateDeclinationAngleJAVA() 
    { 
     return 23.45 * Math.Sin((DegreeToRadian(360.0/365.25)) * (DayNumber - 81)); 
    } 

    private double CalculateDeclinationAngle() 
    { 
     var tmp = (2 * Math.PI) * ((284 + DayNumber)/36.25); 
     return 23.45 * (Math.PI/180.0) * Math.Sin(tmp); 
    } 

    private double DegreeToRadian(double angle) 
    { 
     return Math.PI * angle/180.0; 
    } 

    private double RadianToDegree(double angle) 
    { 
     return angle * (180.0/Math.PI); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     textBox1.Text = "C#: " + RadianToDegree(CalculateDeclinationAngle()).ToString(); 
     textBox2.Text = "JAVA: " + CalculateDeclinationAngleJAVA().ToString(); 
    } 
} 
+0

Пожалуйста, [улучшите] (http://stackoverflow.com/help/mcve) свой вопрос. Попытайтесь выяснить, где в вашем коде может возникнуть проблема и задать конкретный вопрос. – hotzst

+1

Почему вы отметили его [tag: java]? –

ответ

0

Я бы повторно написать свой CalculateDeclinationAngle() в

private double CalculateDeclinationAngle() 
{ 
    var tmp = (2 * Math.PI) * ((284 + DayNumber)/365.25); 
    return 23.45 * (Math.PI/180.0) * Math.Sin(tmp); 
} 

Это просто тривиальная ошибка, это не 36,25 но 365.25

См. Мой срок ее действия e: http://rextester.com/QSLE14863

+0

Спасибо. Из-за того, что около 365,25 дней в году. –

+0

@HestHansen, Добро пожаловать :) –

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