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


A A A A Автор Тема: Линия "Терминатора"  (Прочитано 13953 раз)

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

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #100 : 07 Мар 2010 [17:08:13] »
Стрелка - это обозначение вектора, так же как и шрифт bold. Не я придумала, распространенная практика :). Если бы писала все в Ворде, то была бы однородность, а так как формулы я писала в MathType, то появились стрелки во  вставленных формулах и жирный шрифт как обозначение векторов в тексте.
Цитата
на этапе 7 arccos(N*R) аргумент нужно в радианы переводить?
Нет. И в arccos(G'*S/|S|) тоже не нужно.

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #101 : 08 Мар 2010 [10:38:47] »
Стрелка - это обозначение вектора, так же как и шрифт bold. Не я придумала, распространенная практика :). Если бы писала все в Ворде, то была бы однородность, а так как формулы я писала в MathType, то появились стрелки во  вставленных формулах и жирный шрифт как обозначение векторов в тексте.
Цитата
на этапе 7 arccos(N*R) аргумент нужно в радианы переводить?
Нет. И в arccos(G'*S/|S|) тоже не нужно.

Всех женщин этого замечательного форума и лично Вас, Tau, поздравляю с 8 марта и желаю всего, всего(....нужное вписать) :)
Tau, не рисуется проекция небесного экватора.  :'( :'( :'( Не могли бы Вы дать контрольные цифры на 7 этап.

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #102 : 08 Мар 2010 [16:14:02] »
kress, нужное вписала  :), файл прицепила.

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #103 : 08 Мар 2010 [19:42:43] »
файл прицепила.

Tau, проверьте пожалуйста вычисление вектора К. В  Вашем мануале К = R'*G', но в расчетах Вы, похоже, считаете
К = R*G' (т.е R из этапа №2). 

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #104 : 08 Мар 2010 [20:26:21] »
Да, натаскала кусков из разных процедур, а переменные переименовала не все. Приз мне за очередную рассеянность.

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #105 : 18 Мар 2010 [09:47:17] »
Доброго времени давненько не заходил.
Ну,  возвращаясь к напечатанному как говорят...
Дабы не создавать новую тему спрошу здесь.
Есть теперь солнышко и есть луна на моей карте, естественно кружками, примитивно но наглядно. Тут в орбитроне обнаружил, что луна меняет фазы, пошарил по форуму, нашел расчеты фаз, но слишком муторно и подробно, мне это не нужно, мне бы  просто для наглядности четыре  - пять фаз на рост и убывание точность не нужна, но чтоб примерно соответствовало дате. Или подозреваю придется  :-\ ........????
С уважением RN3QGA.
« Последнее редактирование: 18 Мар 2010 [22:44:46] от RN3QGA »
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #106 : 19 Мар 2010 [04:12:27] »
RN3QGA, понадобятся эклиптические долготы Луны и Солнца, и они у вас уже вычислены.
Lsun - эклиптическая долгота Солнца. Ее вычисляли как Lsun = 280.46+36000.772*T+... , когда геоцентрический вектор Солнца считали.
Lmoon - эклиптическая долгота Луны. Ее вычисляли как Lmoon = 218.32+481267.883*T+... , когда геоцентрический вектор Луны считали.

Фаза F = Lmoon-Lsun
Привести F в диапазон от 0 до 360 градусов.
F = 0 новолуние
F = 90 первая четверть
F = 180 полнолуние
F = 270 третья четверть
Соответственно при F от 0 до 180 градусов Луна "растет", от 180 до 360 - убывает.
Освещенность лунного диска в процентах:  P = (1-cos(F))/2 * 100%

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #107 : 21 Мар 2010 [09:00:44] »
 ::)Tau супер, Большое СПС. Все Ок! Работает.
С уважением RN3QGA. ;)
Celestron SkyMaster 15x70 Binoculars

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #108 : 21 Мар 2010 [22:11:13] »
А если это бы к диску еще привязать соответственно  градусам и % освещенности  (ну как говорится чем дальше в...) это сложно али нет??? ::)
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #109 : 22 Мар 2010 [12:27:12] »
Пусть R - радиус диска Луны в пикселах, (xm, ym) - растровые координаты положения Луны на карте в пикселах, Faza - фаза в градусах (от 0 до 360).
Для каждого пиксела, находящегося внутри круга, определим его цвет и нарисуем.
У VB код читабельный, надеюсь - на Дельфи перевести сможете.
  For j = -R To R
   For i = -R To R
    If i ^ 2 + j ^ 2 < R ^ 2 Then ' пиксел внутри круга
        Rf = Sqr(R ^ 2 - j ^ 2)  '  Sqr - это извлечение квадратного корня
        L = i * 90 / Rf + Faza
        L = ang360(L) ' приведение угла в диапазон 0-360 градусов
        If L <= 90 Or L >= 270 Then
           Color = RGB(0, 0, 0) ' черный цвет
        Else
           Color = RGB(250, 250, 250) ' белый цвет
        End If
        x1 = i + xm ' координаты пиксела на карте
        y1 = -j + ym
        Form1.pic.PSet (x1, y1), Color  ' закрашиваем пиксел (x1, y1) цветом Color
    End If
   Next i
  Next j
 Form1.pic.Circle (xm, ym), R, RGB(0, 0, 0)  ' Рисуем границу диска Луны - черный круг радиусом R с центром в точке (xm,ym)

По смыслу мы проецируем некую цветовую карту на диск Луны, но я-таки думаю, что объяснять смысл тут подробно не нужно.
В результате получится такое изображение (см. рисунок).

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #110 : 22 Мар 2010 [21:43:39] »
Да, код понятен в принципе, только вот здесь для ясности если можно, чтоб мне найти аналог в Дельфи:
/ L = ang360(L)/, что в VB делает Ang и что ^ в выражении /... (R ^ 2)/ к примеру.

 

Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #111 : 22 Мар 2010 [22:01:46] »
^ это возведение в степень. R^2 = R*R
ang360 это функция приведения угла L в диапазон 0-360 градусов:

Do while L>=360
 L=L-360
Loop

Do while L<0
 L=L+360
Loop

Do while... Loop - это цикл с выходом по условию. В любом языке есть такая конструкция. Некое действие повторяется, пока соблюдается условие.

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #112 : 22 Мар 2010 [22:16:40] »
Ну примерно так я и думал. Со степенью понятно, а вот ang придется циклом лепить, че то я такой готовой в дельфи не знаю.  :-[, ну это конечно не значит что ее там нет. Будем крутить.
Мегрси.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #113 : 22 Мар 2010 [22:21:46] »
В VB тоже такой функции нет, это пользовательская функция.
Я думала, вы уже такой функцией обзавелись, когда фазу Луны вычисляли. Фаза должна быть выражена в диапазоне от 0 до 360 градусов
Цитата
Фаза F = Lmoon-Lsun
Привести F в диапазон от 0 до 360 градусов.
иначе я за последствия не отвечаю :)

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Re: Линия "Терминатора"
« Ответ #114 : 23 Мар 2010 [08:19:32] »
В дельфи есть операция mod:

L = L mod 360.0

Только я не уверен, что она может работать с числами с плавающей запятой -- проверьте, не округляет ли она.

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #115 : 23 Мар 2010 [13:37:25] »
 :) Да, я  все понял, приводил к 360 я с помощью цикла,  там все ок, а
на счет mod спасибо lnk за подсказку, округление проверим.
Celestron SkyMaster 15x70 Binoculars

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 264
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Линия "Терминатора"
« Ответ #116 : 23 Мар 2010 [16:25:14] »
Можно сделать так:
Function Ang360(A : Double):Double;
Begin
  While A < 0 Do A:=A+360;
  // Вариант 1
  While A > 360 Do A:=A-360;
  Result:=A;
  // Вариант 2
  Result:=Frac(A/360)*360;
End;
Иван Мхитаров
Кубанский Астрономический Клуб "45".

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #117 : 23 Мар 2010 [16:41:08] »
Да у меня приведение точно так и сделано, только не функцией а в теле программы !
Спасибо за варианты  Ivan Mhitarov для общего развития , что надо! ::)
Celestron SkyMaster 15x70 Binoculars

Оффлайн Ink

  • ****
  • Сообщений: 430
  • Благодарностей: 10
    • Сообщения от Ink
Re: Линия "Терминатора"
« Ответ #118 : 23 Мар 2010 [16:49:24] »
Я уже проверил, mod хочет только целые числа :)

Тогда можно сделать так:

function fmod(a, b: double): double;
begin
    result := a-b*trunc(a/b);
end;

function ang360(A : double): double;
begin
  result := fmod(a, 360.0);
end;

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #119 : 23 Мар 2010 [23:18:34] »
 ;D  Да, все проверил, действительно mod  ест только целые числа, но честно говоря у меня, что то не совсем получается как у Tau картинка с луной,  вроде постарался перевести на Дельфи но знаний у меня как у ерша иголок
и все но, что то я не так делаю зарисовывает у меня все либо черным, либо белым. Ну еще пока разбираюсь конечно, но если кто -то из знатоков поможет буду весьма благодарен.
Вот мой код, что получился, ну уж не ...:
procedure TForm_Terminator.Button3Click(Sender: TObject);
var
i,j,R,xm,ym,x1,y1,ug:integer;
Rf,L:Double;
Color:TColor;
 begin
  R:=70;
  xm:=40;
  ym:=40;
  for j:= -R to R do
   begin
   for i:= -R to R do
    if (i *i + j *j) < (R *R) then
        begin                                          // пиксел внутри круга
         Rf:= Sqrt(R*R - j*j);                  //  Sqr - это извлечение квадратного корня
          L:= i * 90 / Rf + 90{(Fz)} ;
         for ug:=0 to 360 do
      begin
         if L<360 then L:=L else
            L:=L-360 ;
         if L>0 then L:=L else
            L:=L+360;
     end;                                                // приведение угла в диапазон 0-360 градусов
  end;

    if (L <= 90) or (L >= 270) then
           Color:= clBlack                             // черный цвет
        else
           Color:=clWhite
        end;                                                //белый цвет
        x1:= i + xm;                                    // координаты пиксела на карте
        y1:= -j + ym;
        Form_Terminator.Image1.Canvas.Pixels[x1, y1]:=Color;
       
end;
 

Некоторые переменные даны для наглядности в целых числах.
« Последнее редактирование: 23 Мар 2010 [23:39:22] от RN3QGA »
Celestron SkyMaster 15x70 Binoculars