Телескопы покупают здесь


A A A A Автор Тема: Программа расчета фазы лунны  (Прочитано 7747 раз)

0 Пользователей и 1 Гость просматривают эту тему.

ripsys

  • Гость
Программа расчета фазы лунны
« : 27 Апр 2005 [20:13:47] »
Доброго времени Звездочеты.....
вот пишу программу на дельфи для расчета фазы лунны по сегодняшней дате и времени........программа вроде считает, но результат пока выдает не правильный......
Беру системную дату, разбираю ее (парсинг), перевожу в юлианский стиль.....потом вычисляю эклиптические координаты луны и сонца, потом беру отношение их.......
Но где-то зарыт камень......не понимаю где, если нада я выложу исходники.....только помогите........за помощь отблагодорю, выложу программку для раздачи........

lexluther

  • Гость
Re: Программа расчета фазы лунны
« Ответ #1 : 28 Апр 2005 [10:13:15] »
Доброго времени Звездочеты.....
вот пишу программу на дельфи для расчета фазы лунны по сегодняшней дате и времени........программа вроде считает, но результат пока выдает не правильный......
Беру системную дату, разбираю ее (парсинг), перевожу в юлианский стиль.....потом вычисляю эклиптические координаты луны и сонца, потом беру отношение их.......
Но где-то зарыт камень......не понимаю где, если нада я выложу исходники.....только помогите........за помощь отблагодорю, выложу программку для раздачи........

Привет, не мог бы ты поделится формулами и принципом вычисления?

Заранее огромное спасибо.

Артем Иванов
www.cubereality.com

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 223
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Программа расчета фазы лунны
« Ответ #2 : 28 Апр 2005 [11:21:35] »
Function GetPhase(Day, Month, Year:Integer):Real;
  Var T, S      :Extended;
      LS,BS,RS  :Extended;
      L ,B ,R   :Extended;
      CGam,SGam :Extended;
  Begin
    T:=(MJD(Day, Month, Year, 0.0)-MJD2000)/36525;
    Sun2000(T,LS,BS,RS);
    Moon   (T,L ,B ,R );
    CGam:=Cs(LS-L)*Cs(B);
    SGam:=Sqrt(1.0-CGam*CGam);
    S:=Atn2(SGam,(0.0025-CGam));
    T:=LS-L;
    If T < 0 Then
      T:=T+360;
    If T < 180
      Then GetPhase:=-Sqr(Cs(S/2))
      Else GetPhase:=Sqr(Cs(S/2));
  End;


  Procedure DrawMoon(Canv : TCanvas; R : TRect; Phase : Real);
    Var W, H : Integer;
    Begin
      W:=R.Right-R.Left;
      H:=R.Bottom-R.Top;
      With Canv do
        Begin
          Brush.Color:=clBlack;
          Brush.Style:=bsSolid;
          Pen.Color:=clBlack;
          Ellipse(R.Left, R.Top, R.Right, R.Bottom);
          If Abs(Phase) < 0.01 Then
            Exit;
          Brush.Color:=clWhite;
          If Phase > 0
            Then Pie(R.Left, R.Top, R.Right, R.Bottom,
                     R.Left+ (W div 2), R.Bottom, R.Left+ (W div 2), R.Top)
            Else Pie(R.Left, R.Top, R.Right, R.Bottom,
                     R.Left+ (W div 2), R.Top, R.Left+ (W div 2), R.Bottom);
          If (Abs(Phase) >= 0.48) And (Abs(Phase) <= 0.52) Then
            Exit;
          If Abs(Phase) < 0.5 Then
            Brush.Color:=clBlack;
          Pen.Color:=Brush.Color;
          Ellipse(R.Left+Round(W-W*Abs(Phase)), R.Top, R.Left+Round(W*Abs(Phase)), R.Bottom);
          Pen.Color:=clBlack;
          Brush.Color:=clWhite;
          Brush.Style:=bsClear;
          Ellipse(R.Left, R.Top, R.Right, R.Bottom);
        End
    End;
Вот, писалось еще на Delphi 1 лет 9 назад. Первая функция считает фазу, вторая - рисует Луну в заданной фазе.
В первой функции используются функции из Монтенбрука, но раз у тебя уже есть долготы Солнца и Луны - проблем быть не должно. Если понадобится - функции вышлю приватом.
« Последнее редактирование: 28 Апр 2005 [11:24:24] от Ivan Mhitarov »
Иван Мхитаров
Кубанский Астрономический Клуб "45".

ripsys

  • Гость
Re: Программа расчета фазы лунны
« Ответ #3 : 28 Апр 2005 [11:25:05] »
Доброго времени суток.....
Краткое описание ситуации....
Один чел (который силен в астрономии, но не в программировании) попросил меня (увлекаюсь программированием на дельфи, в универе паскаль сначала ведь учили, а потом и дельфи ) написать для него маленькую прогу, которая бы сидела в трее и считала по текущему времени фазу луна. Снабдив при этом меня всеми исходниками которые у него были (из разных книг, старые разработки на фортране и паскале),  вот я и разбираюсь с процедурами которые есть, конечна есть коментарии что на входе и на выходе у процедуры, формул расчета как таковых не снаю, в поисках, вот так вот и разбираюсь: то у людей на астрофоруме спрошу пару вопросов.....
Принцип подсчета таков: по текущей дате вычисляем даты юлианского календаря в формате J2000, использую её вычисляю геоцентрические эклиптические долготы луны и солнца, а потом отношение этих долгот....может я где-то ошибся.....поправте пожайлуста..

ЗЫ: и не забудьте я новичек в астрономиии..........

ripsys

  • Гость
Re: Программа расчета фазы лунны
« Ответ #4 : 28 Апр 2005 [11:26:06] »
пока писал поэму ответ написали  8)
спасиба, монтебрук имеется......я даже сразу заметил свою ошибку......еще раз спасиба......

ripsys

  • Гость
Re: Программа расчета фазы лунны
« Ответ #5 : 28 Апр 2005 [11:48:29] »
2 Ivan Mhitarov
а не мог бы ты выложить процедуру которая выполняет фунцкию расчета и процедуру рисования.....просто свой код переделал выдает тот же результат.....интересно......просто не понимаю......

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 223
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Программа расчета фазы лунны
« Ответ #6 : 28 Апр 2005 [12:54:31] »
Вот картинка и исходник (все во вложениях). Если будут вопросы про треевую иконку - пиши лично, здесь это уже оффтопик.
Delphi 7 без сторонних компонентов и библиотек.
Иван Мхитаров
Кубанский Астрономический Клуб "45".

Оффлайн IgorZ

  • ***
  • Сообщений: 236
  • Благодарностей: 0
    • Сообщения от IgorZ
Re: Программа расчета фазы лунны
« Ответ #7 : 28 Апр 2005 [18:46:24] »
Извиняюсь за не совсем уместный здесь вопрос, но может кто-то знает где в инете есть "Астрономия на ПК" Монтенбрука для Паскаля. Для Си эта книга у меня есть, но программирую я на Делфи.

ChesnoCK

  • Гость
Re: Программа расчета фазы лунны
« Ответ #8 : 28 Апр 2005 [19:38:51] »
А не подскажите, где можно взять скрипт или апплет для показа фаз луны на текущий момент?

ripsys

  • Гость
Re: Программа расчета фазы лунны
« Ответ #9 : 28 Апр 2005 [20:14:11] »
Натыкался в сети на Ява аплет для расчета фазы луны, поищи яндексом, но говорят что точность у него некакая..........
На счет проги - то все работает, луна рисуется, будем надеятся что правильно, да и немного подправил код, инвертировал цвета, а то видимое  - черное, я сделал как оно и есть - видимое белое, не видимое черное....
Благодарю всех кто принял участие  ;D

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 223
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Программа расчета фазы лунны
« Ответ #10 : 02 Мая 2005 [12:59:07] »
На счет проги - то все работает, луна рисуется, будем надеятся что правильно, да и немного подправил код, инвертировал цвета, а то видимое - черное, я сделал как оно и есть - видимое белое, не видимое черное....
Не понял... Программа дает прямое изображение и видимая часть обозначена белым. Сейчас Луна как раз стареющая и на приведенном выше скриншоте все показано правильно.
Иван Мхитаров
Кубанский Астрономический Клуб "45".

ripsys

  • Гость
Re: Программа расчета фазы лунны
« Ответ #11 : 03 Мая 2005 [06:52:30] »
да.....это я немного ошибся, просто у меня была проблема с процедурой Cs она в дельфи описанна, а есть еще и твое описание.....еще раз спасиба за ответы.....
Не хотелось бы создавать новую тему.......
Сейчас пишу продолжение к моей програмке....теперь мучаюсь с вычислением времени восхода луны для опредиленного географического места.......как бы застрял на нахождении эклиптического градусав котором находится луна.....может кто-то может что нить подсказать......я в долгу не останусь.......
Заранее спасибо, и извените если мой вопрос у вас просто отнял время........

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 223
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Программа расчета фазы лунны
« Ответ #12 : 03 Мая 2005 [18:20:13] »
Смотри функцию ArcTan2. Выдает угол в нужной четверти.
Иван Мхитаров
Кубанский Астрономический Клуб "45".

ZUDA32.EXE

  • Гость
Re: Программа расчета фазы лунны
« Ответ #13 : 05 Мая 2005 [17:53:31] »
Может немного не в тему... -
Я знаю, как рассчитать фазу луны в известный день и час.
А вот как решается обратная задача? То есть - определить день и час, когда будет иметь место известная фаза?
Ведь она решалась задолго до появления компъютеров - то есть, должны быть аналитические формулы?