%------------------------------------------------------------------------------------------------------------- % Simple output a horoscope on a defined date. % Input : date of a horoscope % Reference: http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/MATLAB/ % Reference: http://ru.scribd.com/doc/57253920/Anatoly-T-fomenko-Mysteries-of-Egyptian-Zodiacs-and-Other-Riddles-of-Ancient-History % Tested : Matlab R2011b % By : Poltavsky Sasha 24.04.2013 % URL : http://www.bible-exodus.narod2.ru/articles/astro_ephemeris/jpl_ephemeris/jpl_ephemeris.html#zodiacs %-------------------------------------------------------------------------------------------------------------- % ATTENTION !!! ВНИМАНИЕ !!! % before start script download and install additional files : % перед тем как запустить скрипт, скачайте и добавьте % ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de422.bsp - ephemeris for 2999 BC ... 3000 AD % ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/a_old_versions/de408.bsp - ephemeris for 10000 BC ... 10000 AD % http://www.bible-exodus.narod2.ru/articles/astro_ephemeris/jpl_ephemeris/data/my_sites.tpc - or use '399' instead of observer % http://www.bible-exodus.narod2.ru/articles/astro_ephemeris/jpl_ephemeris/data/my_frames.tf - or use '399' instead of observer % http://naif.jpl.nasa.gov/pub/naif/pds/data/ros-e_m_a_c-spice-6-v1.0/rossp_1000/DATA/FK/RSSD0002.TF % http://bible-exodus.narod2.ru/articles/astro_ephemeris/jpl_ephemeris/scripts/mice_toolkit_n0064/mice_tol_1e-4_lib.zip - for increasing TOL % add paths to standart.tm clear all; cspice_furnsh( 'd:\Documents and Settings\user\Мои документы\MATLAB\astro\mice\data\standard.tm' ); % epochs % начальные моменты времени et_horos = cspice_str2et ( '1185-03-27 10:00 UTC+4'); % horoscope epoch - 12-23-0001 BC = Xmas % момент гороскопа % тест : в Каире восход '2013-05-02 07:14 UTC+4' закат '2013-05-01 20:28 UTC+4' et_zodiac_2=et_horos; % ввести свое значние et_zodiac_2 для его отрисовки %et_zodiac_2 = cspice_str2et ( '1185-03-27 06:00 UTC+2'); % publication epoch % момент пересчета гороскопа fl_lng = 0; % English output = 1, Russian =0, Both = 2 % JCAL - Юлианский календарь, Рождество было до Григореанской реформы % JCAL - Julian calendar, Cristmas was before Gregorian reform TIMFMT = 'DD.MM.YYYY ERA HR:MN ::RND::JCAL::UTC'; TIMLEN = 35; % time format % выводимый формат времени observer='CAIRO' ; % место наблюдения Каир (Египет) [~, lon, ~, ~, ~] = get_observer (observer); % for local solar time % узнать долготу места для местного солн.времени topo_frame = horzcat(observer, '_TOPO'); abcr = 'LT+S'; step = cspice_spd/2; crds='CYLINDRICAL' ; crd = 'LONGITUDE' ; adj = 0.0; MAXWIN = 20000; MAXIVL = MAXWIN / 2; % adjustment on precession = 360° for 25776 years % поправки на прецессию 360° за 25776 лет % used 1976 IAU precession model, built into SPICE % использована модель "1976 IAU" встроенная в SPICE. % [pos1, ~] = cspice_spkpos ( 'SUN', et_horos, 'ECLIPDATE' , abcr, observer); % позиция планеты от эклиптики той эпохи % [pos2, ~] = cspice_spkpos ( 'SUN', et_horos, 'ECLIPJ2000', abcr, observer); % позиция планеты по нынешней эклиптике % [~, lon1, ~] = cspice_recrad(pos1); [~, lon2, ~] = cspice_recrad(pos2); lon3 = lon2-lon1; % prcs_at_horos = cspice_convrt(lon3,'radians','degrees'); % [pos1, ~] = cspice_spkpos ( 'SUN', et_zodiac_2, 'ECLIPDATE' , abcr, observer); % позиция планеты от эклиптики той эпохи % [pos2, ~] = cspice_spkpos ( 'SUN', et_zodiac_2, 'ECLIPJ2000', abcr, observer); % позиция планеты по нынешней эклиптике % [~, lon1, ~] = cspice_recrad(pos1); [~, lon2, ~] = cspice_recrad(pos2); lon3 = lon2-lon1; % prcs_zodiac_2 = cspice_convrt(lon3,'radians','degrees'); prcs_at_horos = 360/((cspice_tyear * 25776) / (now - et_horos)); % более просто способ prcs_zodiac_2 = 360/((cspice_tyear * 25776) / (now - et_zodiac_2)); % more easy way % зодиак planets = {'Jup', 'Sat', 'Ven', 'Mars', 'Mer', 'Sun', 'Moon'; ... 'JUPITER BARYCENTER', 'SATURN BARYCENTER', 'VENUS', 'MARS', 'MERCURY', 'SUN', 'MOON'}; dots = [15,12,10,10,10,35,35]; colors = [[0.4 0 0]; [0 0.4 0.6]; [0.1 0.5 0.3]; [0.6 0 0]; [0.8 0 0]; [0.7 0.5 0]; [0.8 0.4 0.1]]; lats = [0,0,0,0,0,0,0]; lons = [0,0,0,0,0,0,0]; % позиции планет fprintf ( 'позиции планет в эклиптике J2000.0, на %s \n\n', cspice_timout( et_horos, 'DD.MM.YYYY ERA JCAL HR:MN ::RND::JCAL::UTC UTC')) ; fl=0; % akfu n=numel(planets(1,:)); % количество записей for ii=1:n target=planets(2,ii); [pos, ~] = cspice_spkpos ( target, et_horos, 'ECLIPJ2000', abcr, observer); % позиция планеты [~, lon, lat] = cspice_recrad(pos); % картезианские координаты в радиальные небесной сферы lons(ii)=cspice_convrt(lon,'radians','degrees'); lats(ii)=cspice_convrt(lat,'radians','degrees'); fprintf ( '%s\t LON %s\t LAT %s\t \n', cell2mat(target), num2str(lons(ii)), num2str(lats(ii))); end % угол наклона эклиптики к горизонту % % дней до весеннего равноденствия % st_win = cspice_wninsd ( et_horos, et_horos + cspice_tyear); step = cspice_spd*180; crds = 'LATITUDINAL' ; crd = 'LONGITUDE' ; adj = 0.0; % res = cspice_gfposc ( 'SUN', 'ECLIPJ2000', abcr, observer, crds, crd,'=', 0 * cspice_rpd , adj, step, MAXIVL, st_win); % res= res(1); res = abs(et_horos - res); % if res > (cspice_tyear/2); res = cspice_tyear - res; end % res = res / cspice_spd; % заслон Земли на эклиптику % определяем заслон по широте 0 эклиптике abcorr='none'; % абберацию не учитывать [pos, ~] = cspice_spkpos ( '399', et_horos, 'ECLIPJ2000', abcorr, observer); % позиция баицентра Земли в эклиптике [~, lon_e, ~] = cspice_recrad(pos); lon_e=cspice_convrt(lon_e,'radians','degrees'); % угол наклона эклиптики к горизонту % % восход Солнца % st_win1 = cspice_wninsd ( et_horos, et_horos + cspice_spd); step = cspice_spd/2.1; % crdsys = 'LATITUDINAL';coord = 'LATITUDE'; relate = '='; adjust=0; % % полсолнца над горизонтом без учета абберации % sunrise = cspice_gfposc ( 'SUN', topo_frame, abcorr, observer, crdsys, coord, relate, 0. * cspice_rpd , adjust, step, MAXIVL, st_win1 ); % [pos, ~] = cspice_spkpos ( 'Sun', sunrise(1)+ cspice_spd/36, topo_frame, abcorr, observer); % [~, ~, lat] = cspice_reclat(pos); lat=lat * cspice_dpr; d_alt = 10-lat; % mat1 = cspice_pxform( 'IAU_EARTH', topo_frame, et_horos ); pole1 = mat1(:,3,:); % mat2 = cspice_pxform( 'IAU_EARTH', 'ECLIPJ2000', et_horos ); pole2 = mat2(:,3,:); % output an image of goroscope % вывод гороскопа if fl_lng == 0 p_name_t={horzcat('Планеты в созвездиях на ', cspice_timout( et_horos, 'DD.MM.YYYY ERA JCAL HR:MN ::RND::JCAL::UTC UTC'), ... ' место ', observer, ' (красным - начала созвездий, синим - зодиак в эпоху гороскопа)');' '}; p_name=horzcat('Планеты в созвездиях на ', cspice_timout( et_horos, 'DD.MM.YYYY ERA JCAL HR:MN ::RND::JCAL::UTC'), ' UTC '); elseif fl_lng > 0 p_name_t={horzcat('Planets in constellations at ', cspice_timout( et_horos, 'DD.MM.YYYY ERA JCAL HR:MN ::RND::JCAL::UTC'), ' UTC ', ... ' Red - begining of const., blue - zodiac at it''s epoch, green at publication epoch');' '}; p_name=horzcat('Planets in constellations at ', cspice_timout( et_horos, 'DD.MM.YYYY ERA JCAL HR:MN ::RND::JCAL::UTC'), ' UTC '); end scrsz = get(0,'ScreenSize'); figure('Name',p_name,'NumberTitle','off', 'Position',[1 scrsz(4)/2.5 scrsz(3) scrsz(4)/2]); d_alt = 0; % предает наклон эклиптики к горизонту - еще не доделано if lon_e <90 x=[0 0 lon_e+90-d_alt lon_e+90+d_alt ]; x2=[270+lon_e+d_alt 270+lon_e-d_alt 360 360]; y=[10 -10 -10 10 ]; y2=[10 -10 -10 10]; elseif lon_e > 270 x=[lon_e-90+d_alt lon_e-90-d_alt 360 360]; x2=[lon_e-270-d_alt lon_e-270+d_alt 0 0]; y=[10 -10 -10 10 ]; y2=[10 -10 -10 10]; else x=[lon_e - 90 + d_alt lon_e- 90 - d_alt lon_e + 90 + d_alt lon_e + 90 - d_alt]; x2=[]; y=[10 -10 -10 10 ]; y2=[]; end title(p_name_t); hold on f=fill(x, y, [.7 .8 .7], x2, y2, [.7 .8 .7],'FaceAlpha', 1) ; %alpha(0); alpha(f,0.5); % p=scatter(lons(:), lats(:), dots(:), colors(:), 'filled'); n=numel(lons(:)); % количество записей for ii=1:n text(lons(ii)+1,lats(ii)+3, planets(1,ii), 'HorizontalAlignment','right') p=scatter(lons(ii), lats(ii), dots(ii), colors(ii,:), 'filled'); end ax=axis; Ax1=gca; grid on ; axis('image') ; axis([0 360 -10 +10]); set(gca,'XDir','reverse'); set(gca,'Color', [0.9 0.9 1]); set(Ax1,'XColor', [0.5 0 0]) % beginnings of constellations on J2000 ecliptics % начала созвездий по % эклиптике J2000 set(gca,'XTick', [31, 56, 92, 118, 137, 172, 215, 236, 266, 296, 326, 349]) % names of constellations % названия создвездий if fl_lng==0 set(gca,'XTickLabel',{'<-Овен ', 'Телец ', 'Близнецы ', 'Рак ', 'Лев ', 'Дева ', 'Весы ', ... 'Скорпион ', 'Стрелец ', 'Козерог ', 'Водолей ', 'Рыбы '}) elseif fl_lng == 1 set(gca,'XTickLabel',{'<-Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', ... 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'}) elseif fl_lng == 2 set(gca,'XTickLabel',{'<-Ari|Овн', 'Tau|Тлц', 'Gem|Блз', 'Cnc|Рак', 'Leo|Лев', 'Vir|Дева', ... 'Lib|Весы', 'Sco|Скрпн', 'Sgr|Стрлц', 'Cap|Кзрг', 'Aqr|Вдл', 'Psc|Рыбы'}) end grid on ; axis('image'); axis(ax); hold on; ax=axis; % scale of zodiac at goroscope epoch - blue % шкала зодиака на эпоху гороскопа - синяя Ax2=axes('Position',get(Ax1,'Position'),'XAxisLocation','top'); set(Ax2,'color','none'); set(Ax2,'XColor', [0 0 0.7]) set(Ax2,'xtick',(prcs_at_horos:30:360+prcs_at_horos)); set(Ax2,'xticklabel',(0:30:360)); set(gca,'XDir','reverse'); set(Ax2,'FontSize',8); set(Ax2,'Yticklabel','') grid on ; axis('image'); axis(ax); if et_horos ~= et_zodiac_2 ax=axis; % scale of zodiac at publications (or anything else) epoch - green % шкала зодиака на эпоху публикации - зеленая Ax3=axes('Position',get(Ax1,'Position'),'XAxisLocation','top'); set(Ax3,'color','none'); set(Ax3,'XColor', [0 0.7 0]) set(Ax3,'xtick',(prcs_zodiac_2:30:360+prcs_zodiac_2)); set(Ax3,'xticklabel',(0:30:360)); set(gca,'XDir','reverse'); set(Ax3,'Yticklabel',''); set(Ax3,'TickDir', 'out'); set(Ax3,'FontSize',8) grid on ; axis('image') ; axis(ax); end set(gca,'box','off'); cspice_kclear