| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the Qt3D module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:BSD$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** BSD License Usage |
| ** Alternatively, you may use this file under the terms of the BSD license |
| ** as follows: |
| ** |
| ** "Redistribution and use in source and binary forms, with or without |
| ** modification, are permitted provided that the following conditions are |
| ** met: |
| ** * Redistributions of source code must retain the above copyright |
| ** notice, this list of conditions and the following disclaimer. |
| ** * Redistributions in binary form must reproduce the above copyright |
| ** notice, this list of conditions and the following disclaimer in |
| ** the documentation and/or other materials provided with the |
| ** distribution. |
| ** * Neither the name of The Qt Company Ltd nor the names of its |
| ** contributors may be used to endorse or promote products derived |
| ** from this software without specific prior written permission. |
| ** |
| ** |
| ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| .pragma library |
| |
| var SUN = 0; |
| var MERCURY = 1; |
| var VENUS = 2; |
| var EARTH = 3; |
| var MARS = 4; |
| var JUPITER = 5; |
| var SATURN = 6; |
| var URANUS = 7; |
| var NEPTUNE = 8; |
| var NUM_SELECTABLE_PLANETS = 9; |
| var MOON = 9; |
| var SOLAR_SYSTEM = 100; |
| |
| function planetId(planetName) { |
| switch (planetName) { |
| case "Sun": |
| return SUN |
| case "Mercury": |
| return MERCURY |
| case "Venus": |
| return VENUS |
| case "Earth": |
| return EARTH |
| case "Mars": |
| return MARS |
| case "Jupiter": |
| return JUPITER |
| case "Saturn": |
| return SATURN |
| case "Uranus": |
| return URANUS |
| case "Neptune": |
| return NEPTUNE |
| case "Solar System": |
| return SOLAR_SYSTEM |
| } |
| } |
| |
| function planetIndex(planetName) { |
| switch (planetName) { |
| case "Sun": |
| return 0 |
| case "Mercury": |
| return 1 |
| case "Venus": |
| return 2 |
| case "Earth": |
| return 3 |
| case "Mars": |
| return 4 |
| case "Jupiter": |
| return 5 |
| case "Saturn": |
| return 6 |
| case "Uranus": |
| return 7 |
| case "Neptune": |
| return 8 |
| case "Solar System": |
| return 9 |
| } |
| } |
| |
| var planets = []; // Planet data info |
| |
| // Units are in 10^3 KM |
| |
| var solarDistance = 2600.000; |
| var saturnOuterRadius = 0.120700; |
| var uranusOuterRadius = 0.040; |
| |
| var auScale = 149.597870700; // 0.001 AU (in thousands of kilometers) |
| |
| function loadPlanetData() { |
| |
| // Planet Data |
| // radius - planet radius |
| // tilt - planet axis angle |
| // N1/2 - longitude of the ascending node |
| // i1/2 - inclination to the ecliptic (plane of the Earth's orbit) |
| // w1/2 - argument of perihelion |
| // a1/2 - semi-major axis, or mean distance from Sun |
| // e1/2 - eccentricity (0=circle, 0-1=ellipse, 1=parabola) |
| // M1/2 - mean anomaly (0 at perihelion; increases uniformly with time) |
| // period - sidereal rotation period |
| // centerOfOrbit - the planet in the center of the orbit |
| // (orbital elements based on http://www.stjarnhimlen.se/comp/ppcomp.html) |
| |
| var sun = { radius: 0.694439, tilt: 63.87, period: 25.05, x: 0, y: 0, z: 0, |
| roll: 0 }; |
| planets.push(sun); |
| var mercury = { |
| radius: 0.002433722, tilt: 0.04, N1: 48.3313, N2: 0.0000324587, |
| i1: 7.0047, i2: 0.0000000500, w1: 29.1241, w2: 0.0000101444, |
| a1: 0.387098, a2: 0, e1: 0.205635, e2: 0.000000000559, |
| M1: 168.6562, M2: 4.0923344368, period: 58.646, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(mercury); |
| var venus = { |
| radius: 0.006046079, tilt: 177.36, N1: 76.6799, N2: 0.0000246590, |
| i1: 3.3946, i2: 0.0000000275, w1: 54.8910, w2: 0.0000138374, |
| a1: 0.723330, a2: 0, e1: 0.006773, e2: -0.000000001302, |
| M1: 48.0052, M2: 1.6021302244, period: 243.0185, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(venus); |
| var earth = { |
| radius: 0.006371, tilt: 25.44, N1: 174.873, N2: 0, |
| i1: 0.00005, i2: 0, w1: 102.94719, w2: 0, |
| a1: 1, a2: 0, e1: 0.01671022, e2: 0, |
| M1: 357.529, M2: 0.985608, period: 0.997, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(earth); |
| var mars = { |
| radius: 0.003389372, tilt: 25.19, N1: 49.5574, N2: 0.0000211081, |
| i1: 1.8497, i2: -0.0000000178, w1: 286.5016, w2: 0.0000292961, |
| a1: 1.523688, a2: 0, e1: 0.093405, e2: 0.000000002516, |
| M1: 18.6021, M2: 0.5240207766, period: 1.025957, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(mars); |
| var jupiter = { |
| radius: 0.07141254, tilt: 3.13, N1: 100.4542, N2: 0.0000276854, |
| i1: 1.3030, i2: -0.0000001557, w1: 273.8777, w2: 0.0000164505, |
| a1: 5.20256, a2: 0, e1: 0.048498, e2: 0.000000004469, |
| M1: 19.8950, M2: 0.0830853001, period: 0.4135, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(jupiter); |
| var saturn = { |
| radius: 0.06019958, tilt: 26.73, N1: 113.6634, N2: 0.0000238980, |
| i1: 2.4886, i2: -0.0000001081, w1: 339.3939, w2: 0.0000297661, |
| a1: 9.55475, a2: 0, e1: 0.055546, e2: -0.000000009499, |
| M1: 316.9670, M2: 0.0334442282, period: 0.4395, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(saturn); |
| var uranus = { |
| radius: 0.0255286, tilt: 97.77, N1: 74.0005, N2: 0.000013978, |
| i1: 0.7733, i2: 0.000000019, w1: 96.6612, w2: 0.000030565, |
| a1: 19.18171, a2: -0.0000000155, e1: 0.047318, e2: 0.00000000745, |
| M1: 142.5905, M2: 0.011725806, period: 0.71833, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(uranus); |
| var neptune = { |
| radius: 0.02473859, tilt: 28.32, N1: 131.7806, N2: 0.000030173, |
| i1: 1.7700, i2: -0.000000255, w1: 272.8461, w2: 0.000006027, |
| a1: 30.05826, a2: 0.00000003313, e1: 0.008606, e2: 0.00000000215, |
| M1: 260.2471, M2: 0.005995147, period: 0.6713, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: SUN |
| }; |
| planets.push(neptune); |
| var moon = { |
| radius: 0.0015424, tilt: 28.32, N1: 125.1228, N2: -0.0529538083, |
| i1: 5.1454, i2: 0, w1: 318.0634, w2: 0.1643573223, |
| a1: 0.273, a2: 0, e1: 0.054900, e2: 0, |
| M1: 115.3654, M2: 13.0649929509, period: 27.321582, x: 0, y: 0, z: 0, |
| roll: 0, centerOfOrbit: EARTH |
| }; |
| planets.push(moon); |
| |
| return planets; |
| } |
| |
| function getOuterRadius(planet) { |
| var outerRadius = solarDistance; |
| if (planet !== SOLAR_SYSTEM) { |
| outerRadius = planets[planet]["radius"]; |
| if (planet === SATURN) { |
| outerRadius =+ saturnOuterRadius; |
| } else if (planet === URANUS) { |
| outerRadius =+ uranusOuterRadius; |
| } else if (planet === SUN) { |
| outerRadius = planets[planet]["radius"] / 10; |
| } |
| } |
| |
| return outerRadius; |
| } |