добрый день!
начиная изучать астрологию, чтобы понять что к чему (а не пользоваться сразу готовым), решил по ходу изучения писать программку.
на сайте () есть статья - Астрология с калькулятором. По ней предлагается вычислить карту.
И так.
)
GMT получился 17 часов.
вот тут же у меня первая загвоздка.
Вот мой код:
Вы нигде не ошиблись и всё сделали абсолютно правильно.
Просто нужно перевести абсолютные градусы в относительные и из десятичной системы(с которой проще и удобнее программировать) в систему градусы-минуты(привычную для отображения):
0 - 30 Овен,
30 - 60 Телец
180 - 210 Весы,
либо математически:
192,43 % 30 = 6, добавляем единицу, получаем знак: Весы.
Т.е. Солнце у нас находится в 12-ти градусов Весов. Теперь, смотрим минуты.
Кстати, чтобы сразу правильно округлялось с тем, чтобы отбрасывать всё, что за запятой, рекомендую добавить 1/120 к первоначальному значению. Теперь, осталось трансформировать это значение в минуты:
0.432372 + 0.0083333(примерно 1/120) = 0.440705
И умножаем на 60, чтобы получить количество минут: 0.440705 * 60 = 26.44, т.е. 26 минут
Итого у нас получилось 12 градусов и 26 минут Весов, как собственно и в примере.
Так поступаем со всеми координатами.
Вот, примерно так будет выглядить функция, делающая это автоматически и заполняющая по указателю 10 char символов координатами(в С стиле):
Вроде бы lordwilex(где-то были Швейцарские эфемериды по-русски) начинал переводить, но какова стадия перевода и насколько он готов я не знаю.
__________________
Что завтра будет - неизвестно,
Хотя нетрудно предсказать,
О, нам нечего терять.
Какая жизнь - такие песни.
А жизнь нелепа и смешна,
Дальше - тишина,
Не объехать и не убежать.
(с) Ария
Последний раз редактировалось afterforever, 19.02.2012 в 02:55.
На сайте есть исходники на с++ (кажется именно ++) для проги для составления космограмм (без сетки домов). Естественно есть и сама скомпилированная прога. Называется "Домашний Астролог".
__________________
Он смерил Берлиоза взглядом, сквозь зубы пробормотал что-то вроде: "Раз, два... Меркурий во втором доме... луна ушла... шесть -- несчастье... вечер -- семь..."
- и громко и радостно объявил: -- Вам отрежут голову!
Итак, продолжаю исследования..
Данная программа по-минутно рассчитывает положения небесных тел. Задача была в следующем, узнать "скорость", т.е. за какой промежуток времени планеты меняют своё положение. Результаты неожиданные (для меня :))..
Код:
...
double plarr[9]; // массив для девяти планет
// найдем минимальное время в мин.
//---- заполним массив координат на 3:00
for (int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, 00, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
plarr[planet] = x2[0];
}
//----
int min = 1; // счетчик минут
bool isdone = 0;
// будем расчитывать координаты, пока не увидим хотя бы одно изменение
while(!isdone)
{
for(int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, min, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
if (plarr[planet] < x2[0]){
swe_get_planet_name(planet, splanet);
isdone = 1;
break;
}
min++;
}
}
printf("%d MIN, PLANET = %s", min, splanet);
в итоге на выходе следующее:
Код:
61 MIN, PLANET = Sun
т.е. координаты солнца поменялись на 61-й минуте, или в 4:01
возникает резонный вопрос..
за счет чего получается многовариантность на более коротких промежутках времени? пример - хорарная астрология (где рассчитывается точное время вопроса). не за чет домов ли?
Итак, продолжаю исследования..
Данная программа по-минутно рассчитывает положения небесных тел. Задача была в следующем, узнать "скорость", т.е. за какой промежуток времени планеты меняют своё положение. Результаты неожиданные (для меня :))..
Код:
...
double plarr[9]; // массив для девяти планет
// найдем минимальное время в мин.
//---- заполним массив координат на 3:00
for (int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, 00, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
plarr[planet] = x2[0];
}
//----
int min = 1; // счетчик минут
bool isdone = 0;
// будем расчитывать координаты, пока не увидим хотя бы одно изменение
while(!isdone)
{
for(int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, min, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
if (plarr[planet] < x2[0]){
swe_get_planet_name(planet, splanet);
isdone = 1;
break;
}
min++;
}
}
printf("%d MIN, PLANET = %s", min, splanet);
в итоге на выходе следующее:
Код:
61 MIN, PLANET = Sun
т.е. координаты солнца поменялись на 61-й минуте, или в 4:01
возникает резонный вопрос..
за счет чего получается многовариантность на более коротких промежутках времени? пример - хорарная астрология (где рассчитывается точное время вопроса). не за чет домов ли?
спасибо!
Долго не мог понять про что вопрос, оказалось про астрологию, а не про программирование.
За счет домов, конечно!
__________________
Он смерил Берлиоза взглядом, сквозь зубы пробормотал что-то вроде: "Раз, два... Меркурий во втором доме... луна ушла... шесть -- несчастье... вечер -- семь..."
- и громко и радостно объявил: -- Вам отрежут голову!
Итак, продолжаю исследования..
Данная программа по-минутно рассчитывает положения небесных тел. Задача была в следующем, узнать "скорость", т.е. за какой промежуток времени планеты меняют своё положение. Результаты неожиданные (для меня :))..
Код:
...
double plarr[9]; // массив для девяти планет
// найдем минимальное время в мин.
//---- заполним массив координат на 3:00
for (int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, 00, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
plarr[planet] = x2[0];
}
//----
int min = 1; // счетчик минут
bool isdone = 0;
// будем расчитывать координаты, пока не увидим хотя бы одно изменение
while(!isdone)
{
for(int planet = SE_SUN; planet <= SE_PLUTO; planet++){
swe_calc_ut(swe_julday(2004, 03, 29, swe_hour(03, min, 00), SE_GREG_CAL), planet, SEFLG_TRUEPOS, x2, serr);
if (plarr[planet] < x2[0]){
swe_get_planet_name(planet, splanet);
isdone = 1;
break;
}
min++;
}
}
printf("%d MIN, PLANET = %s", min, splanet);
в итоге на выходе следующее:
Код:
61 MIN, PLANET = Sun
т.е. координаты солнца поменялись на 61-й минуте, или в 4:01
Я тоже ничего не понимаю. Минут 15 медитировал на Ваш код, - вроде бы все верно, но координаты планет по этому алгоритму должны меняться на каждом шаге цикла, хоть на тысячную долю градуса, но должны меняться.
Единственно где может быть ошибка - это функция "swe_hour()" , я что-то не припомню её в составе ШЭ, как я понимаю - Вы её сами написали?
Возможно в каком-то месте эта функция неосторожно округляет время или возвращает тип int. Советую часы/минуты/секунды переводить в десятичную долю часа так:
double Час = час + минута/60 + секунда/3600
Если ошибка не в этом, тогда я ничего не понимаю
Цитата:
Сообщение от alexk23
возникает резонный вопрос..
за счет чего получается многовариантность на более коротких промежутках времени? пример - хорарная астрология (где рассчитывается точное время вопроса). не за чет домов ли?
Я в таких случаях вообще всегда делаю кастинг, это мой способ избегать таких ошибок:
Код:
struct date
{
int second;
int minute;
int hour;
int day;
int month;
int year;
};
#define tdate struct date
double calculated_hour(const tdate *date){
return (double)date->hour + (double)date->minute/60 + (double)date->second/3600;
};
Интересно, что эту функцию, наверное пишут все или почти все, кто работает с швейцарскими эфемеридами
__________________
Что завтра будет - неизвестно,
Хотя нетрудно предсказать,
О, нам нечего терять.
Какая жизнь - такие песни.
А жизнь нелепа и смешна,
Дальше - тишина,
Не объехать и не убежать.
Доброго!
чтоб не засорять форум, напишу в своей теме...
вот выбрал время продолжить астро-исследования. Наткнулся на одну проблему. в статье "астрология с калькулятором" прочитал, что если аспект получается более 180 град. нужно вычитать из него 360! Но, заметил, что такие "вычтенные" аспекты работают как-то по-другому (пытаюсь прогнозировать биржу). Т.е. при этом 90 град и 270 град для программы будет один и тот же аспект)) хотя, я думаю, что это неправильно...
Разъясните, пожалуйста, ситуацию с аспектами более 180 град...
и еще.. я вычисляю аспекты, учитывая ретроградность планет, если ШЭ показывают отрицательную скорость планеты, значит она ретроградна. Есть ли какие-нить особенности в вычислениях аспектов с такими планетами (просто моя программа, "запоминает флаг" ретроградности и рассчитывает аспект как обычный).
ps
кстати, я перешел на C#, т.к. этот язык мне показался более мощным и удобным. Если кого заинтересует, алгоритмы могу скинуть.
Доброго!
чтоб не засорять форум, напишу в своей теме...
вот выбрал время продолжить астро-исследования. Наткнулся на одну проблему. в статье "астрология с калькулятором" прочитал, что если аспект получается более 180 град. нужно вычитать из него 360! Но, заметил, что такие "вычтенные" аспекты работают как-то по-другому (пытаюсь прогнозировать биржу). Т.е. при этом 90 град и 270 град для программы будет один и тот же аспект)) хотя, я думаю, что это неправильно...
Разъясните, пожалуйста, ситуацию с аспектами более 180 град...
и еще.. я вычисляю аспекты, учитывая ретроградность планет, если ШЭ показывают отрицательную скорость планеты, значит она ретроградна. Есть ли какие-нить особенности в вычислениях аспектов с такими планетами (просто моя программа, "запоминает флаг" ретроградности и рассчитывает аспект как обычный).
ps
кстати, я перешел на C#, т.к. этот язык мне показался более мощным и удобным. Если кого заинтересует, алгоритмы могу скинуть.
С уважением.
По поводу аспектов, на басиках у меня есть такая функция на все случаи жизни , думаю Вы без проблем перепишите её на C#:
Код:
Public Function StartPoint(SPoint, pl)
' Возвращает угловое расстояние между точками SPoint и pl
' в диапазане от 0 до 360 градусов
' Иными словами, - возвращает долготу точки pl в
' зодиаке, в котором за нулевой градус принята точка SPoint.
' Очень важная функция, полезная во многих приложениях астрологии!!!
' На пример, если мы за SPoint возьмем координату Восходящего узла
' а за pl любую планету, то получим её координату в Драконическом зодиаке
' Если за SPoint приймем Асц, - то получим раскладку домов (правда равнодомную)
' Если за SPoint принять Луну, а за pl Солнце, и умножить это на 100/360 то получим
' фазу Луны в процентах.
' Так же, в статистических исследованиях измерять угловые расстояния в
' системе 360 градусов гораздо практичней и информативней, чем в традиционных аспектах
Dim d As Double
d = pl - SPoint
If d < 0 Then d = d + 360
If d > 360 Then d = d - 360
StartPoint = d
End Function
Если в первый аргумент поставить более медленную планету, а во второй более быструю, а от результата отнять 180 градусов - получится число в диапазоне от -180 до +180. Собственно говоря если число больше меньше - это означает расходящийся аспект угловое расстояние, если больше - то сходящийся. А модуль этого числа - просто аспект угловое расстояние.
В случае ретроградности одной из планет - просто сравниваем скорости и в первый аргумент ставим более быструю планету. Однако, тут нужно учесть, что этот подход работает только в случае небольших орбов (если у Вас орбы больше градуса - я бы не рискнул), если орб слишком большой, то пока дело дойдет до схождения аспекта - может случится так, что скорость одной из планет поменяется или ретроградное движение смениться на директное и аспект так и не сойдется. Чтобы эти эффекты учесть - нужно придумывать вот такой алгоритм, если у вас есть время/желание - можете этим заняться.
К тому же в традиционной астрологии аспекты через границу знака не считаются. Например, если одна из планет находится в 30 градусе Льва, а другая в 30 градусе стрельца - то это трин, а эслэ одна из планет находится в 30 градусе льва, а вторая в первом градусе козерога, - то эт уже не трин, а просто угловое расстояние близкое к 120 градусам, не смотря на то, что разница между 2 примерами всего в 1 градус
__________________
В астрологии Деда Мороза нет
Последний раз редактировалось LordWilex, 30.03.2012 в 21:51.
Если в первый аргумент поставить более медленную планету, а во второй более быструю, а от результата отнять 180 градусов - получится число в диапазоне от -180 до +180.
Извините, я тут тупанул, это не верно. Если мы от результата просто отнимим 180, то получится черте что
Если функция StartPoint возвращает число меньшее 180 - то ничего не меняем. А если больше, то от 360 отнимаем результат
Например, если функция вернула 179 градусов, то ничего не меняем - это и есть аспект.
А если вернула 181, то от 360 отнимаем 181 и (если нам интересно сходящийся аспект или расходящийся и в первом аргументе стоит более быстрая планета) - просто меняем знак на противоположный.
К тому же в традиционной астрологии аспекты через границу знака не считаются. Например, если одна из планет находится в 30 градусе Льва, а другая в 30 градусе стрельца - то это трин, а эслэ одна из планет находится в 30 градусе льва, а вторая в первом градусе козерога, - то эт уже не трин, а просто угловое расстояние близкое к 120 градусам, не смотря на то, что разница между 2 примерами всего в 1 градус
вот оно как.. я в своей программе не учитываю дома, как понял - зря..
но тут дело вот в чем биржа "размазана" по всем миру :( А при расчете домов необходимо указать конкретные координаты местности... есть, конечно, основные "центры", но они совсем небольшой промежуток времени работают отдельно, практически всегда одновременно работают два и более центра. Что делать в этом случае? (как вариант считать астро-карту для каждого работающего в данный момент центра и как-то всё это сопоставлять.. жуть, конечно, но другого пока не придумывается)
и ещё... ШЭ поддерживают большое кол-во разных систем домов.. какую выбрать? Или только экспериментально? :)
вот оно как.. я в своей программе не учитываю дома, как понял - зря..
Кажется мы говорим на разных языках. Я не про дома, я про знаки. Попробую перефразировать: в аспекте находятся только те планеты, которые находятся в знаках, которые в аспекте друг по отношению к другу.
А раскладка домов к аспектам никакого отношения не имеет
Цитата:
Сообщение от alexk23
но тут дело вот в чем биржа "размазана" по всем миру :( А при расчете домов необходимо указать конкретные координаты местности... есть, конечно, основные "центры", но они совсем небольшой промежуток времени работают отдельно, практически всегда одновременно работают два и более центра. Что делать в этом случае? (как вариант считать астро-карту для каждого работающего в данный момент центра и как-то всё это сопоставлять.. жуть, конечно, но другого пока не придумывается)
Тут всего 4 варианта:
1. У биржи в любом случае должен быть юридический адрес или место регистрации/место основания . Она же не возникла из ниоткуда, а любые события на бирже - это транзиты к карте её создания. Но в этом случае Вам нужно где-то взять карту её основания и хорошо подумать над тем, какие методы будите использовать, чтобы адекватно соотнести карты событий с картой биржы. (более чем разумное и теоретически обоснованное решение).
2. Для каждой карты события брать свои координаты + какая-то стат обработка (не знаю, какая, тут все индивидуально - все зависит от решаемой задачи).
3. Либо для каждой карты указывать свои географические координаты и брать усредненную раскладку домов получится некое подобие средней Девисона - тоже может прокатить (или не прокатить), это достаточно спорно
4. Ну и альтернативный вариант из той же серии - можно использовать средние географические координаты (но это тоже чисто экспериментально, сомнительно, спорно и т.д., но вполне может сработать).
5. Комбинация 3 и 4 варианта на свой страх и риск.
Вариант с "центрами" имхо не катит... хотя все зависит от структуры базы, вполне может случиться так, что в среднем координаты этих центров будут близки к средним координатам всей базы - тогда все автоматом сводится к 4 варианту.
Цитата:
Сообщение от alexk23
и ещё... ШЭ поддерживают большое кол-во разных систем домов.. какую выбрать? Или только экспериментально? :)
Ну это вопрос философский - каждый астролог решает для себя его сам но на нашем форуме особой популярностью пользуется система Региомонтана
Кажется мы говорим на разных языках. Я не про дома, я про знаки. Попробую перефразировать: в аспекте находятся только те планеты, которые находятся в знаках, которые в аспекте друг по отношению к другу.
да, это я чуть тупанул насчет домов :(
насчет знаков немного не понял.
Допустим есть две планеты. Вычисляем сначала разницу в абсолютных координатах. Допустим получилось 120. Далее смотрим в каких знаках находятся планеты, и, если углы планет в этих знаках равны (как в вашем примере про аспект 120 град.), значит это аспект.
Я правильно понял?
да, это я чуть тупанул насчет домов :(
насчет знаков немного не понял.
Допустим есть две планеты. Вычисляем сначала разницу в абсолютных координатах. Допустим получилось 120. Далее смотрим в каких знаках находятся планеты, и, если углы планет в этих знаках равны (как в вашем примере про аспект 120 град.), значит это аспект.
Я правильно понял?
Да, именно так. Хотя на практике лучше начать с измерения углов между знаками.
Например, между Овном и Львом 120 градусов = эти знаки находятся в трине.
Если, например, Солнце находится в 1 градусе Овна, а Луна в 1 градусе Льва - то эти планеты определенно так же находятся в трине.
В вот если Солнце находится в первом градусе Овна, а Луна в последнем градусе Рака, то трина нет, несмотря на то, что в смысле угловых расстояний между Солнцем и Луной что-то около 120 градусов (квадратуры кстати тоже нет, в виду слишком большого орба, хотя между любыми двумя соответствующими градусами Овна и Рака ровно 90 градусов).
Просто нужно один раз вызубрить таблицу аспектов между знаками и тогда это все будет определяться на автомате