Merge lp:~alexwolf/stellarium/date-and-time into lp:stellarium

Proposed by Alexander Wolf
Status: Merged
Merged at revision: 5596
Proposed branch: lp:~alexwolf/stellarium/date-and-time
Merge into: lp:stellarium
Diff against target: 205 lines (+88/-4)
8 files modified
src/core/StelCore.cpp (+27/-2)
src/core/modules/Comet.cpp (+24/-0)
src/core/modules/Comet.hpp (+7/-0)
src/core/modules/MinorPlanet.cpp (+17/-2)
src/core/modules/MinorPlanet.hpp (+3/-0)
src/core/modules/Planet.cpp (+7/-0)
src/core/modules/Planet.hpp (+1/-0)
src/core/modules/SolarSystem.cpp (+2/-0)
To merge this branch: bzr merge lp:~alexwolf/stellarium/date-and-time
Reviewer Review Type Date Requested Status
gzotti Approve
Review via email: mp+123293@code.launchpad.net

Description of the change

Added calculations of length of solar days and sidereal periods for planets, comets and asteroids.

To post a comment you must log in.
Revision history for this message
gzotti (georg-zotti) wrote :

Good idea, sure for me!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/core/StelCore.cpp'
2--- src/core/StelCore.cpp 2012-08-12 12:50:34 +0000
3+++ src/core/StelCore.cpp 2012-09-07 14:54:23 +0000
4@@ -906,7 +906,12 @@
5
6 void StelCore::addSiderealYear()
7 {
8- addSolarDays(365.256363004);
9+ double days = 365.256363004;
10+ const PlanetP& home = position->getHomePlanet();
11+ if ((home->getEnglishName() != "Solar System StelObserver") && (home->getSiderealPeriod()>0))
12+ days = home->getSiderealPeriod();
13+
14+ addSolarDays(days);
15 }
16
17
18@@ -942,11 +947,31 @@
19
20 void StelCore::subtractSiderealYear()
21 {
22- addSolarDays(-365.256363004);
23+ double days = 365.256363004;
24+ const PlanetP& home = position->getHomePlanet();
25+ if ((home->getEnglishName() != "Solar System StelObserver") && (home->getSiderealPeriod()>0))
26+ days = home->getSiderealPeriod();
27+
28+ addSolarDays(-days);
29 }
30
31 void StelCore::addSolarDays(double d)
32 {
33+ double sp, coeff;
34+ const PlanetP& home = position->getHomePlanet();
35+ if (home->getEnglishName() != "Solar System StelObserver")
36+ {
37+ sp = home->getSiderealPeriod();
38+ double dsol = home->getSiderealDay();
39+
40+ if ((home->getEnglishName() == "Venus") || (home->getEnglishName() == "Uranus"))
41+ coeff = -1 * (sp - 1)/sp;
42+ else
43+ coeff = (sp + 1)/sp;
44+
45+ d *= dsol*coeff;
46+ }
47+
48 setJDay(getJDay() + d);
49 }
50
51
52=== modified file 'src/core/modules/Comet.cpp'
53--- src/core/modules/Comet.cpp 2012-08-10 18:06:08 +0000
54+++ src/core/modules/Comet.cpp 2012-09-07 14:54:23 +0000
55@@ -155,11 +155,35 @@
56 oss << q_("Apparent diameter: %1").arg(StelUtils::radToDmsStr(2.*getAngularSize(core)*M_PI/180., true));
57 */
58
59+ // If semi-major axis not zero then calculate and display orbital period for comet in days
60+ double siderealPeriod = getSiderealPeriod();
61+ if ((flags&Extra1) && (siderealPeriod>0))
62+ {
63+ // TRANSLATORS: Sidereal (orbital) period for solar system bodies in days and in Julian years (symbol: a)
64+ oss << q_("Sidereal period: %1 days (%2 a)").arg(QString::number(siderealPeriod, 'f', 2)).arg(QString::number(siderealPeriod/365.25, 'f', 3)) << "<br>";
65+ }
66+
67 postProcessInfoString(str, flags);
68
69 return str;
70 }
71
72+void Comet::setSemiMajorAxis(double value)
73+{
74+ semiMajorAxis = value;
75+}
76+
77+double Comet::getSiderealPeriod() const
78+{
79+ double period;
80+ if (semiMajorAxis>0)
81+ period = StelUtils::calculateOrbitalPeriod(semiMajorAxis);
82+ else
83+ period = 0;
84+
85+ return period;
86+}
87+
88 float Comet::getVMagnitude(const StelCore* core, bool withExtinction) const
89 {
90 //If the two parameter system is not used,
91
92=== modified file 'src/core/modules/Comet.hpp'
93--- src/core/modules/Comet.hpp 2012-01-11 10:50:37 +0000
94+++ src/core/modules/Comet.hpp 2012-09-07 14:54:23 +0000
95@@ -74,9 +74,16 @@
96 //! as the same parameters in MinorPlanet.
97 void setAbsoluteMagnitudeAndSlope(double magnitude, double slope);
98
99+ //! set value for semi-major axis in AU
100+ void setSemiMajorAxis(double value);
101+
102+ //! get sidereal period for minor planet
103+ double getSiderealPeriod() const;
104+
105 private:
106 double absoluteMagnitude;
107 double slopeParameter;
108+ double semiMajorAxis;
109
110 bool isCometFragment;
111 bool nameIsProvisionalDesignation;
112
113=== modified file 'src/core/modules/MinorPlanet.cpp'
114--- src/core/modules/MinorPlanet.cpp 2012-08-12 18:32:10 +0000
115+++ src/core/modules/MinorPlanet.cpp 2012-09-07 14:54:23 +0000
116@@ -240,8 +240,12 @@
117 oss << q_("Apparent diameter: %1").arg(StelUtils::radToDmsStr(2.*getAngularSize(core)*M_PI/180., true)) << "<br>";
118
119 // If semi-major axis not zero then calculate and display orbital period for asteroid in days
120- if ((flags&Extra1) && (semiMajorAxis>0))
121- oss << q_("Orbital period: %1 days").arg(QString::number(StelUtils::calculateOrbitalPeriod(semiMajorAxis), 'f', 0)) << "<br>";
122+ double siderealPeriod = getSiderealPeriod();
123+ if ((flags&Extra1) && (siderealPeriod>0))
124+ {
125+ // TRANSLATORS: Sidereal (orbital) period for solar system bodies in days and in Julian years (symbol: a)
126+ oss << q_("Sidereal period: %1 days (%2 a)").arg(QString::number(siderealPeriod, 'f', 2)).arg(QString::number(siderealPeriod/365.25, 'f', 3)) << "<br>";
127+ }
128
129 //This doesn't work, even if setOpenExternalLinks(true) is used in InfoPanel
130 /*
131@@ -254,6 +258,17 @@
132 return str;
133 }
134
135+double MinorPlanet::getSiderealPeriod() const
136+{
137+ double period;
138+ if (semiMajorAxis>0)
139+ period = StelUtils::calculateOrbitalPeriod(semiMajorAxis);
140+ else
141+ period = 0;
142+
143+ return period;
144+}
145+
146 float MinorPlanet::getVMagnitude(const StelCore* core, bool withExtinction) const
147 {
148 float extinctionMag=0.0; // track magnitude loss
149
150=== modified file 'src/core/modules/MinorPlanet.hpp'
151--- src/core/modules/MinorPlanet.hpp 2012-08-10 13:55:20 +0000
152+++ src/core/modules/MinorPlanet.hpp 2012-09-07 14:54:23 +0000
153@@ -104,6 +104,9 @@
154 //! set value for semi-major axis in AU
155 void setSemiMajorAxis(double value);
156
157+ //! get sidereal period for minor planet
158+ double getSiderealPeriod() const;
159+
160 private:
161 int minorPlanetNumber;
162 double absoluteMagnitude;
163
164=== modified file 'src/core/modules/Planet.cpp'
165--- src/core/modules/Planet.cpp 2012-09-06 21:42:42 +0000
166+++ src/core/modules/Planet.cpp 2012-09-07 14:54:23 +0000
167@@ -475,6 +475,13 @@
168 oss << "<br>";
169 }
170
171+ double siderealPeriod = getSiderealPeriod();
172+ if ((flags&Extra1) && (siderealPeriod>0))
173+ {
174+ // TRANSLATORS: Sidereal (orbital) period for solar system bodies in days and in Julian years (symbol: a)
175+ oss << q_("Sidereal period: %1 days (%2 a)").arg(QString::number(siderealPeriod, 'f', 2)).arg(QString::number(siderealPeriod/365.25, 'f', 3)) << "<br>";
176+ }
177+
178 if ((flags&Extra2) && (englishName.compare("Sun")!=0))
179 {
180 const Vec3d& observerHelioPos = core->getObserverHeliocentricEclipticPos();
181
182=== modified file 'src/core/modules/Planet.hpp'
183--- src/core/modules/Planet.hpp 2012-09-06 21:42:42 +0000
184+++ src/core/modules/Planet.hpp 2012-09-07 14:54:23 +0000
185@@ -211,6 +211,7 @@
186 //! @return the radius of the planet in astronomical units.
187 double getRadius(void) const {return radius;}
188 double getSiderealDay(void) const {return re.period;}
189+ double getSiderealPeriod(void) const { return re.siderealPeriod; }
190
191 const QString& getTextMapName() const {return texMapName;}
192
193
194=== modified file 'src/core/modules/SolarSystem.cpp'
195--- src/core/modules/SolarSystem.cpp 2012-08-30 16:26:04 +0000
196+++ src/core/modules/SolarSystem.cpp 2012-09-07 14:54:23 +0000
197@@ -789,6 +789,8 @@
198 }
199 }
200
201+ mp->setSemiMajorAxis(pd.value(secname+"/orbit_SemiMajorAxis", 0).toDouble());
202+
203 }
204 else
205 {