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


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

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

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #40 : 07 Фев 2010 [22:54:20] »
У-упс.  :( А как можно определить какая у меня карта?
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #41 : 07 Фев 2010 [23:02:13] »
А вы карту уже нашли, на которой рисовать будете? Если она от -180 до 180 по долготе, то в центре карты будет Африка. Как в скане Орбитрона, которвый вы приводили в самом начале темы.

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #42 : 07 Фев 2010 [23:45:56] »
Ага,   :-[ А я думал есть какая то формула.
Ну я честно говоря немного не так представлял.
Я думал есть определенная область для рисования ну с размерами Х, У на которой рисуем, а карту просто подгоняем по размерам и центр устанавливаем где нужно.
Я уже начал рисовать, все получается, только не пойму такой эффект.
Делаю область рисования больше терминатор уменьшается, делаю меньше увеличивается,
какая нибудь зависимость есть от размера по X и Y.  Или я что то невнимательно упустил?^-^
С уважением RN3QGA.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #43 : 07 Фев 2010 [23:54:31] »
Цитата
А я думал есть какая то формула.
Формула для рисования карты? Я хочу ее видеть  ;D
Цитата
Я думал есть определенная область для рисования ну с размерами Х, У на которой рисуем, а карту просто подгоняем по размерам

Правильно думаете. Размер карты должен совпадать с размером области рисования.
Цитата
Делаю область рисования больше терминатор уменьшается, делаю меньше увеличивается
Масштаб изменяется при изменении размеров области рисования

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #44 : 07 Фев 2010 [23:59:09] »
А может необходимо масштабировать линию согласно размерам области
Пример как я сделал без масштабирования:

// Рисуем терминатор
   
   Mx:=round(Image1.Width/360);
   My:=round(Image1.Height/180) ;

   Xl:=round((250+A)/Mx);
   Yl:=round((150-F)/My);

   
   Image1.Canvas.LineTo(Xl,Yl);

Ну а если умножить на какое то значение (ток его надо сначала вывести).
Кстати все забываю сказать: Ваш пример (в EXE файле)у меня область одного размера , а сама карта маленькая(намного меньше это из за разрешения экрана ) вот я думаю,  как эти градусы привязать к размеру картинки, ведь надо наверное?
Я чего то видимо недопонимаю, а может уже перегрелся. :-\
« Последнее редактирование: 08 Фев 2010 [00:07:04] от RN3QGA »
Celestron SkyMaster 15x70 Binoculars

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #45 : 08 Фев 2010 [00:12:30] »
Да забыл сказать карты есть с разным качеством, можно и из орбитрона, она кстати там фиксированного размера и при любом разрешении все рисуется правильно. можно сделать и с DXAtlas в этой проге вообще интересно отрисован терминатор, плано переходящий не резкий, а выделены области тени и ночи, оригинально, но о таком я и не мечтаю пока хоть представление получил уже хорошо! ;D 
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #46 : 08 Фев 2010 [00:19:23] »
Цитата
   Mx:=round(Image1.Width/360);
   My:=round(Image1.Height/180) ;
 
Вы делите пикселы на градусы и получаете масштаб в размерности: сколько пикселов на градус.
Цитата
   Xl:=round((250+A)/Mx); 
   Yl:=round((150-F)/My);
Во-первых, откуда взялись 250 и 150? Не догоняю их смысла. На предыдущей странице я писала другие числа.
Во-вторых, графические координаты Xl и Yl должны иметь размерность - пикселы. У вас есть некая величина в градусах и есть масштаб [пискелов/градус] .Вы делите величину на масштаб. Что у вас происходит с размерностью? градус/(пиксел/градус) = градус в квадрате/пиксел. Но вам нужны графические координаты в пикселах. А если вы умножите величину на масштаб, то размерность будет градус*(пиксел/градус) = пиксел. Градусы сократились и получилась размерность в пикселах.

Цитата
у меня область одного размера , а сама карта маленькая(намного меньше это из за разрешения экрана )
Спасибо :). Надо было программно отработать подгонку под разрешение экрана, чего я не сделала. Потому что я не программист, а моделятор, и мне влом заниматься такими тонкостями.

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #47 : 08 Фев 2010 [00:28:06] »
250 и 150 это это пополам размер области это я типа экспериментирую.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #48 : 08 Фев 2010 [00:30:15] »
Цитата
интересно отрисован терминатор, плано переходящий не резкий, а выделены области тени и ночи
Если угловое расстояние между Солнцем и какой-либо точкой карты > 90 градусов, то точка находится в ночной зоне Земли. Можно обозначить зону сумерек. Если угловое расстояние от 90 до 96 градусов, то в этой точке Земли гражданские сумерки, от 96 до 102 градусов - навигационные сумерки и т.д. И рисовать разным цветом. А можно просто цвет зарисовки изменять как функцию от углового расстояния до Солнца - чем больше, тем темнее, тогда  область ночи будет плавной. А можно наложить прозрачный слой и изменять прозрачность в зависимости от углового расстояния точки до Солнца. Много чего можно..
Цитата
250 и 150 это это пополам размер области это я типа экспериментирую.
Складываете пикселы с градусами? Смелый эксперимент :)

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #49 : 08 Фев 2010 [00:39:12] »
 ;D Ага куда уж смелей, понял на сегодня ой и на завтра уже пока одно, с графикой засяду на долго, а я еще хочу, что это все в реальном времени работало, в общем полная засада, извините за нескромный вопрос Tau, а у Вас там случайно ни кого со знанием Паскаля знакомых или друзей нет? Ох чую, на долго я засел, а может вообще то оно и к лучшему :-[.
Во цепляю пример чего у меня получилось пока ( с исходниками). Ток сильно не смейтесь ладно. :)
там правда только для одного времени сделано (менять UT пока нельзя) все остальное можно.
Посмотрите  думаю ка профи сообразите чего у меня не так.
С уважением RN3QGA.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #50 : 08 Фев 2010 [01:27:04] »
Xl:=round((250+A)/Mx);
Yl:=round((150-F)/My);

Это безобразие все-таки поменяйте. Я же не с потолка писала другие числа. Если подумаете - поймете почему именно такие, а не другие. И не делите там, где нужно умножать.

И ситуацию с равноденствием (Fo=0) все же отработайте. Или хотя бы напишите: мол, если |Fo| < 0.00001, то Fo=sgn(Fo)*0.00001. А то вдруг ваша программа будет работать именно в тот момент, когда широта Солнца станет равной нулю? Тут-то она и вырубится с некрасивым сообщением, что на ноль делить нельзя. И хотя эта ситуация бывает два кратких момент в год, но оставлять такие дырки не хорошо.

В реальном времени...
Солнце и линия терминатора двигаются на карте со скоростью 15.041 градуса в час, соответственно можно вычислить частоту обновления картинки. Если масштаб по Х, допустим, равен 1.5 градуса на пиксел, то терминатор сдвинется на 1 пиксел за 1/10 часа, то есть чаще, чем раз в 6 минут перерисовывать не имеет смысла. 

Что касается нескромного вопроса, то мой ответ: нет.
« Последнее редактирование: 10 Фев 2010 [01:32:48] от Tau »

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #51 : 08 Фев 2010 [05:57:18] »
;D Ага куда уж смелей, понял на сегодня ой и на завтра уже пока одно, с графикой засяду на долго, а я еще хочу, что это все в реальном времени работало, в общем полная засада, извините за нескромный вопрос Tau, а у Вас там случайно ни кого со знанием Паскаля знакомых или друзей нет? Ох чую, на долго я засел, а может вообще то оно и к лучшему :-[.
Во цепляю пример чего у меня получилось пока ( с исходниками). Ток сильно не смейтесь ладно. :)
там правда только для одного времени сделано (менять UT пока нельзя) все остальное можно.
Посмотрите  думаю ка профи сообразите чего у меня не так.
С уважением RN3QGA.


Похоже у Вас трудности в рисовании т.к. точки, вроде правильные.
Я вычислял географические координаты точек Терминатора, переводил их сразу в экранные координаты и запоминал в массивы
Если поможет на C++Builder.(Не оптимизировано, на скорую руку).

L0, F0 географические координаты точки земли где солнце в зените.

Функция рисования Терминатора(Pi число пи) Term заполняет массивы XX  и YY с координатами точек Терминатора. Не проверял
Вызываем функцию так.
Term(L0*Pi/180.0,F0*Pi/180.0);

Сама функция Term
void Term(double X,double Y)
{
double ct, T;
if(Y!=0)
    {
    ct = -1/tan(Y);
    for(int i=0;i<360;i++)
        {
        Сперва получаем географические координаты точек терминатора
        XX = Ug180(-180+i) *Pi/180.0;
        T = ct*cos(XX - X);
        YY = atan(T);
        Переводим в координаты на картинке где хотим нарисовать Терминатор
        XX = Xm + Ug180(XX*180.0/Pi)*masx;
        YY = Ym - YY*180.0/Pi*masy;
        }
    }
}

И потом рисуем сам  Терминатор по полученным точкам
(Canvas это полотно на форме где наша картинка с изображением земли)
PaintBox1->Canvas->MoveTo(XX[0], YY[0]);
for(int i=1; i<360; i++)
    PaintBox1->Canvas->LineTo(XX, YY);


Функция приведение угла к 180 градусам.
double Ug180(double x)
{
while(x < -180)   x = x + 180.0;
while(x > 180)   x = x - 180.0;
return x;
}

Масштабы по осям в зависимости от размеров картинки
masx = PaintBox1->Width / 360.0; 
masy = PaintBox1->Height / 180.0;

Центр картинки
Xm = PaintBox1->Width/2;
Ym = PaintBox1->Height/2;

Все благодарности Tau

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #52 : 08 Фев 2010 [06:00:53] »
Вот правильная функция Term
void Term(double X,double Y)
{
double ct, T;
if(Y!=0)
    {
    ct = -1/tan(Y);
    for(int i=0;i<360;i++)
        {
        Сперва получаем географические координаты точек терминатора
        XX = Ug180(-180+i) *Pi/180.0;
        T = ct*cos(XX - X);
        YY = atan(T);
        Переводим в координаты на картинке где хотим нарисовать Терминатор
        XX = Xm + Ug180(XX*180.0/Pi)*masx;
        YY = Ym - YY*180.0/Pi*masy;
        }
    }
}

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #53 : 08 Фев 2010 [06:03:39] »
Почему-то не показываются квадратные скобки в функции Term
XX и YY на самом деле массивы и обращаются к ним по индексам XX , YY

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #54 : 08 Фев 2010 [06:10:35] »
Ну не показывает форум квадратные скобки, в файле должно быть.

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #55 : 08 Фев 2010 [23:27:54] »
Квадратные скобки видимо интепретируются как тэги.

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 270
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Линия "Терминатора"
« Ответ #56 : 09 Фев 2010 [10:59:04] »
Квадратные скобки видимо интепретируются как тэги.
Проверка квадратных скобок ;)
A[I]=0;Вставляется с помощью тэга [ code ] (пробелы убрать)
Иван Мхитаров
Кубанский Астрономический Клуб "45".

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #57 : 09 Фев 2010 [17:58:03] »
Спасибо огромное всем за помощь.
Отдельно -  уважаемой Tau, здорово, что есть такие люди. ;)
Вот, что у меня получилось.
Теперь осталось научить двигать в реальном времени.
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #58 : 09 Фев 2010 [21:00:28] »
RN3QGA, поздравляю :)
Правда, я так и не поняла, что человеку дает лицезрение терминатора? Информативность-то какая?

В рамках прикола: солнечный  и лунный (с точностью до градуса) терминаторы :). Сразу видно, что в Южной Америке над горизонтом и Солнце и Луна, на Аравийском полуострове – только Солнце, в Мексике – только Луна, а в Астралии – ни того, ни другого.

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

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #59 : 10 Фев 2010 [09:56:22] »
 :) Уважаемая Tau. Как радиолюбитель я работаю и днем и ночью,
веду свой Log журнал радиосвязей, но прохождения радиоволн,  на разных диапазонах в разное время суток различное вплоть до наоборот. И чтоб не держать в голове где сейчас день, а где ночь,
вот для этого, вот кстати солнышко на до бы тоже приспособить, от его положения, тоже много зависит, да вообще то от него на нашем шарике все зависит, Ярило оно и есть бог! ;D
С уважением RN3QGA.
Celestron SkyMaster 15x70 Binoculars