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


A A A A Автор Тема: как написать планетарий(по какому принципу они сделаны)? помогите  (Прочитано 2830 раз)

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

Pivovar

  • Гость
Подскажите please как написать программу планетарий(по какому принципу они сделаны)? Слышал что в red shift используется стереографическая проекция - но как её сделать?
Кто занимался этим делом или знает как подскажите пожалуйста.

(писать собираюсь на delphi)

Суворов Владимир

  • Гость
Есть в сети софт под это дело.
Не помню где, но написан на VC++ 6.0
Самое главное исходники выложены.

>>стереографическая проекция - но как её сделать?
Полнейшая ерунда. Изображение развертывается по принципу глобуса.
Приложнению выделяется динамическая память в виде массива, определенного
в рамках считываемой области. И все. И так каждый раз от шага к шагу.
Не нужно разрабатывать такие проги. Нужно их использовать.

 

Pivovar

  • Гость
А можна по конкретнее?

Оффлайн R.bak

  • *****
  • Сообщений: 1 140
  • Благодарностей: 28
    • Сообщения от R.bak
Мне иногда приходят мысли написать ту или иную программу, но потом обстоятельно подумав прихожу к выводу, что таких программ куча и кому нужна моя?
Другое дело, если писать программу которая реально необходима для людей, те где нет конкуренции или достойного решения, то да! Пример: программа Старкалк, напишите к ней плагины которых там не хватает и вам польза(упражнения в программировании) и людям хорошо.
Удачи!

Pivovar

  • Гость
Во первых у меня есть желание её написать;
Во Вторых если она получится , то  я смогу с ней защититься сразу по двум секциям МАНА (астрономия и информатика);
Не Знаю как у других но мне кажется что свое-родное как то приятнее;
Ну а если я хорошо пойму как это делать и программа хорошо получится то её смогут пользоваться люди(попоже);


А сейчас дайте мне ответ на вопрос который я задал пожалуйста.
Чтоб хоть часть из мною вышеперичисленного может быть исполнилась.


              please!

Я уже когда то спрашивал об этом на форуме но ничего конкретного так и не получил, скорее всего кто-то здесь уже делал подобное
« Последнее редактирование: 29 Мар 2006 [23:19:47] от Pivovar »

Pivovar

  • Гость
Кстати а по какой формуле преобразовать полярные координаты в декартовы?

Оффлайн Sleepwalker

  • *****
  • Сообщений: 2 549
  • Благодарностей: 69
  • Александр Лапшин
    • Сообщения от Sleepwalker
Полярные в декартовы ? это для 2Д случая ? ну и вопросы у Вас! :) Если с этим проблема, то что же будет дальше ?  ;)

Если я Ваc правильно понял, то вот решение проблемы ::)

x = r*cos(fi)
y = r*sin(fi)
« Последнее редактирование: 29 Мар 2006 [23:55:25] от Sleepwalker »

Оффлайн anddor

  • ****
  • Сообщений: 414
  • Благодарностей: 9
  • Per aspera ad astra!
    • Сообщения от anddor
pivovar, вот Вам ссылка на исходники замечательного планетария Cartes du Ciel (тоже на дельфи), может найдёте что-нибудь полезное:
http://astrosurf.com/astropc/cartes/sources/
А тут source code новой версии той же программы:
http://www.ap-i.net/skychart/modules.php?op=modload&name=Downloads&file=index&req=viewdownload&cid=10
Вряд ли Вы напишете прогу лучше :), тем более, что эту программу её автор писал и совершенствовал в течение многих лет (около 10) :)
« Последнее редактирование: 30 Мар 2006 [21:36:33] от anddor »
Открылась бездна, звезд полна.
Звездам числа нет, бездне - дна...
                                   М.В. Ломоносов

Pivovar

  • Гость
sleepwalker,
А есть формулы для 3д случая?

Оффлайн St@s

  • **
  • Сообщений: 54
  • Благодарностей: 1
    • Сообщения от St@s
В трёхмерном пространстве полярных координат нет, есть сферические и цилиндрические.
Если серьёзно планируете писать планетарий, возьмите какой-нибудь учебник по аналитической геометрии. Иначе никак.
SkyWatcher DOB 8"

Оффлайн Sleepwalker

  • *****
  • Сообщений: 2 549
  • Благодарностей: 69
  • Александр Лапшин
    • Сообщения от Sleepwalker
Вот как делал я...

Сначала путем легких астрономических расчетов  ;D получаем угол возвышения el и азимут az звезды

Дальше эти углы переводим в трехмерные декартовые XYZ

примерно вот так...

   X = R*cos(el)*cos(az);         
   Y = R*cos(el)*sin(az);
   Z = R*sin(el);

Дальше XYZ проецируем на плоскость, что бы на экране нарисовать, вот... тут синусов будет больше...

void BCT(double X, double Y, double Z, double fi,double psi, double T,
       double& x, double& y, double& z)
{
   double a11,a12,a13,a21,a22,a23,a31,a32,a33;
   
   double cosfi = cos(fi);
   double sinfi = sin(fi);
   double cospsi= cos(psi);
   double sinpsi= sin(psi);
   double cosT  = cos(T);
   double sinT  = sin(T);
   
   a11 = cosfi*cospsi;
   a21 = -sinfi*cosT + cosfi*sinpsi*sinT;
   a31 = sinfi*sinT + cosfi*sinpsi*cosT;

   a12 = sinfi*cospsi;
   a22 = cosfi*cosT + sinfi*sinpsi*sinT;
   a32 =-cosfi*sinT + sinfi*sinpsi*cosT;

   a13 =-sinpsi;
   a23 = cospsi*sinT;
   a33 = cospsi*cosT;
   
   x = a11*X+a12*Z+a13*Y;
   y = a21*X+a22*Z+a23*Y;
   z = a31*X+a32*Z+a33*Y;
}

На выходе y и z можно выводить на канву

Pivovar

  • Гость

Pivovar

  • Гость
А чё такое fi, psi, и t  ?

Оффлайн Sleepwalker

  • *****
  • Сообщений: 2 549
  • Благодарностей: 69
  • Александр Лапшин
    • Сообщения от Sleepwalker
Это углы поворота 3Д системы координат

Pivovar

  • Гость
А это как в Redshift'e будет?

Оффлайн Sleepwalker

  • *****
  • Сообщений: 2 549
  • Благодарностей: 69
  • Александр Лапшин
    • Сообщения от Sleepwalker
Честно говоря, не знаю, наверно всетаки не так, поскольку перспективы тут не будет, но похожего эффекта добится можно

Pivovar

  • Гость
а углы в радианах или градусах

Оффлайн Sleepwalker

  • *****
  • Сообщений: 2 549
  • Благодарностей: 69
  • Александр Лапшин
    • Сообщения от Sleepwalker