![]() |
Home · All Namespaces · All Classes · Functions · Coding Style · Scripting · Plugins · File Structure |
00001 /* 00002 * Stellarium 00003 * Copyright (C) 2002 Fabien Chereau 00004 * 00005 * This program is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * as published by the Free Software Foundation; either version 2 00008 * of the License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef _STELNAVIGATOR_HPP_ 00021 #define _STELNAVIGATOR_HPP_ 00022 00023 #include "VecMath.hpp" 00024 #include "StelLocation.hpp" 00025 00026 #include <QObject> 00027 #include <QString> 00028 #include <QTime> 00029 #include <QDateTime> 00030 00031 // Conversion in standar Julian time format 00032 #define JD_SECOND 0.000011574074074074074074 00033 #define JD_MINUTE 0.00069444444444444444444 00034 #define JD_HOUR 0.041666666666666666666 00035 #define JD_DAY 1. 00036 00037 class StelObserver; 00038 class StelObject; 00039 00046 class StelNavigator : public QObject 00047 { 00048 Q_OBJECT 00049 Q_PROPERTY(double timeRate READ getTimeRate WRITE setTimeRate) 00050 00051 public: 00052 // Create and initialise to default a navigation context 00053 StelNavigator(); 00054 ~StelNavigator(); 00055 00056 void init(); 00057 00058 void updateTime(double deltaTime); 00059 void updateTransformMatrices(void); 00060 00062 void lookAtJ2000(const Vec3d& pos, const Vec3d& up); 00063 00065 const StelLocation& getCurrentLocation() const; 00066 00072 void moveObserverTo(const StelLocation& target, double duration=1., double durationIfPlanetChange=1.); 00073 00076 double getLocalSideralTime() const; 00077 00079 double getLocalSideralDayLength() const; 00080 00082 Vec3d getObserverHeliocentricEclipticPos() const; 00083 00084 00085 Vec3d altAzToEquinoxEqu(const Vec3d& v) const {return matAltAzToEquinoxEqu*v;} 00086 Vec3d equinoxEquToAltAz(const Vec3d& v) const {return matEquinoxEquToAltAz*v;} 00087 Vec3d equinoxEquToJ2000(const Vec3d& v) const {return matEquinoxEquToJ2000*v;} 00088 Vec3d altAzToJ2000(const Vec3d& v) const {return matEquinoxEquToJ2000*matAltAzToEquinoxEqu*v;} 00089 Vec3d galacticToJ2000(const Vec3d& v) const {return matGalacticToJ2000*v;} 00090 Vec3d j2000ToEquinoxEqu(const Vec3d& v) const {return matJ2000ToEquinoxEqu*v;} 00091 Vec3d j2000ToAltAz(const Vec3d& v) const {return matJ2000ToAltAz*v;} 00092 Vec3d j2000ToGalactic(const Vec3d& v) const {return matJ2000ToGalactic*v;} 00094 Vec3d heliocentricEclipticToAltAz(const Vec3d& v) const {return matHeliocentricEclipticToAltAz*v;} 00096 Vec3d heliocentricEclipticToEquinoxEqu(const Vec3d& v) const {return matHeliocentricEclipticToEquinoxEqu*v;} 00099 Vec3d heliocentricEclipticToEarthPosEquinoxEqu(const Vec3d& v) const {return matAltAzToEquinoxEqu*matHeliocentricEclipticToAltAz*v;} 00100 00102 const Mat4d getHeliocentricEclipticModelViewMat() const {return matAltAzModelView*matHeliocentricEclipticToAltAz;} 00104 const Mat4d getObservercentricEclipticModelViewMat() const {return matAltAzModelView*matJ2000ToAltAz*matVsop87ToJ2000;} 00106 const Mat4d getEquinoxEquModelViewMat() const {return matAltAzModelView*matEquinoxEquToAltAz;} 00108 const Mat4d& getAltAzModelViewMat() const {return matAltAzModelView;} 00110 const Mat4d getJ2000ModelViewMat() const {return matAltAzModelView*matEquinoxEquToAltAz*matJ2000ToEquinoxEqu;} 00112 const Mat4d getGalacticModelViewMat() const {return getJ2000ModelViewMat()*matGalacticToJ2000;} 00113 00115 QString getStartupTimeMode() {return startupTimeMode;} 00116 void setStartupTimeMode(const QString& s); 00117 00119 static const Mat4d matJ2000ToVsop87; 00121 static const Mat4d matVsop87ToJ2000; 00123 static const Mat4d matJ2000ToGalactic; 00125 static const Mat4d matGalacticToJ2000; 00126 00127 public slots: 00129 void setJDay(double JD) {JDay=JD;} 00131 double getJDay() const {return JDay;} 00132 00134 double getPresetSkyTime() const {return presetSkyTime;} 00136 void setPresetSkyTime(double d) {presetSkyTime=d;} 00137 00139 void setTimeRate(double ts) {timeSpeed=ts; emit timeRateChanged(timeSpeed);} 00141 double getTimeRate() const {return timeSpeed;} 00142 00144 void increaseTimeSpeed(); 00146 void decreaseTimeSpeed(); 00148 void increaseTimeSpeedLess(); 00150 void decreaseTimeSpeedLess(); 00151 00153 void setZeroTimeSpeed() {setTimeRate(0);} 00155 void setRealTimeSpeed() {setTimeRate(JD_SECOND);} 00157 void toggleRealTimeSpeed() {(!getRealTimeSpeed()) ? setRealTimeSpeed() : setZeroTimeSpeed();} 00159 bool getRealTimeSpeed() const {return (fabs(timeSpeed-JD_SECOND)<0.0000001);} 00160 00162 void setTimeNow(); 00164 void setTodayTime(const QTime& target); 00166 bool getIsTimeNow() const; 00167 00169 QTime getInitTodayTime(void) {return initTodayTime;} 00171 void setInitTodayTime(const QTime& t) {initTodayTime=t;} 00173 void setPresetSkyTime(QDateTime dt); 00174 00176 void addHour() {addSolarDays(0.04166666666666666667);} 00178 void addDay() {addSolarDays(1.0);} 00180 void addWeek() {addSolarDays(7.0);} 00181 00184 void addSiderealDay() {addSiderealDays(1.0);} 00187 void addSiderealWeek() {addSiderealDays(7.0);} 00188 00190 void subtractHour() {addSolarDays(-0.04166666666666666667);} 00192 void subtractDay() {addSolarDays(-1.0);} 00194 void subtractWeek() {addSolarDays(-7.0);} 00195 00198 void subtractSiderealDay() {addSiderealDays(-1.0);} 00201 void subtractSiderealWeek() {addSiderealDays(-7.0);} 00202 00205 void addSolarDays(double d); 00209 void addSiderealDays(double d); 00210 00213 void moveObserverToSelected(); 00214 00216 QString getDefaultLocationID() const {return defaultLocationID;} 00218 void setDefaultLocationID(const QString& id); 00219 00220 signals: 00222 void locationChanged(StelLocation); 00224 void timeRateChanged(double rate); 00225 00226 private: 00227 // Matrices used for every coordinate transfo 00228 Mat4d matHeliocentricEclipticToAltAz; // Transform from heliocentric ecliptic (Vsop87) to observer-centric altazimuthal coordinate 00229 Mat4d matAltAzToHeliocentricEcliptic; // Transform from observer-centric altazimuthal coordinate to heliocentric ecliptic (Vsop87) 00230 Mat4d matAltAzToEquinoxEqu; // Transform from observer-centric altazimuthal coordinate to Earth Equatorial 00231 Mat4d matEquinoxEquToAltAz; // Transform from observer-centric altazimuthal coordinate to Earth Equatorial 00232 Mat4d matHeliocentricEclipticToEquinoxEqu;// Transform from heliocentric ecliptic (Vsop87) to earth equatorial coordinate 00233 Mat4d matEquinoxEquToJ2000; 00234 Mat4d matJ2000ToEquinoxEqu; 00235 Mat4d matJ2000ToAltAz; 00236 00237 Mat4d matAltAzModelView; // Modelview matrix for observer-centric altazimuthal drawing 00238 00239 // Time variable 00240 double timeSpeed; // Positive : forward, Negative : Backward, 1 = 1sec/sec 00241 double JDay; // Curent time in Julian day 00242 00243 double presetSkyTime; 00244 QTime initTodayTime; 00245 QString startupTimeMode; 00246 00247 // The ID of the default startup location 00248 QString defaultLocationID; 00249 00250 // Position variables 00251 StelObserver* position; 00252 }; 00253 00254 #endif // _STELNAVIGATOR_HPP_