From c97d5126eced98f43bd6ba57b60cb7df6a9d2052 Mon Sep 17 00:00:00 2001 From: Emil Axelsson Date: Wed, 17 Jul 2019 15:21:13 +0200 Subject: [PATCH] Feature/timeline translation (#931) * Work on timeline translations * Add Apollo 11 Descent data * Ability to display negative altitudes * Expose globe translation properties * Added timeline rotation, and some scene updates. * Cleaning up apollo_sites scene; fixing boulder 1 in place to adress heightmap issue * Use quaternion slerp instaet of linear interpolation + Cleanup * Change to old lem model while waiting for new version to be pushed to data repo * Small fixes --- data/assets/apollo_sites.scene | 24 +- .../solarsystem/missions/apollo/a11_lem.asset | 4 +- .../solarsystem/missions/apollo/a17_lem.asset | 1 + .../missions/apollo/apollo11.asset | 186 +- .../apollo/apollo11_lem_descent.asset | 1835 +++++++++++++++++ .../apollo11_lem_descent_rotation.asset | 1587 ++++++++++++++ .../missions/apollo/apollo8launchtrail.asset | 74 + .../missions/apollo/bouldersstation2.asset | 12 +- .../missions/apollo/bouldersstation6.asset | 12 +- .../missions/apollo/bouldersstation7.asset | 4 +- include/openspace/util/timeline.h | 11 +- include/openspace/util/timeline.inl | 24 +- modules/base/CMakeLists.txt | 13 +- modules/base/basemodule.cpp | 7 + modules/base/rotation/timelinerotation.cpp | 118 ++ modules/base/rotation/timelinerotation.h | 49 + .../base/translation/timelinetranslation.cpp | 114 + .../base/translation/timelinetranslation.h | 50 + .../src/dashboarditemglobelocation.cpp | 9 +- .../globebrowsing/src/globetranslation.cpp | 103 +- modules/globebrowsing/src/globetranslation.h | 4 +- .../space/translation/horizonstranslation.cpp | 2 +- 22 files changed, 4085 insertions(+), 158 deletions(-) create mode 100644 data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent.asset create mode 100644 data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent_rotation.asset create mode 100644 data/assets/scene/solarsystem/missions/apollo/apollo8launchtrail.asset create mode 100644 modules/base/rotation/timelinerotation.cpp create mode 100644 modules/base/rotation/timelinerotation.h create mode 100644 modules/base/translation/timelinetranslation.cpp create mode 100644 modules/base/translation/timelinetranslation.h diff --git a/data/assets/apollo_sites.scene b/data/assets/apollo_sites.scene index 05b0460970..8a487e3b25 100644 --- a/data/assets/apollo_sites.scene +++ b/data/assets/apollo_sites.scene @@ -2,12 +2,10 @@ asset.require('./base') --moonrocks.scene local sceneHelper = asset.require('util/scene_helper') - -- local station2 = asset.require('scene/solarsystem/missions/apollo/bouldersstation2') -- local station6 = asset.require('scene/solarsystem/missions/apollo/bouldersstation6') -- local station7 = asset.require('scene/solarsystem/missions/apollo/bouldersstation7') asset.require('scene/solarsystem/missions/apollo/apollo11') -asset.require('scene/solarsystem/missions/apollo/a11_lem') asset.require('scene/solarsystem/missions/apollo/a17_lem') asset.require('scene/solarsystem/missions/apollo/apollo_globebrowsing') asset.require('scene/solarsystem/missions/apollo/apollo_11_lem_flipbook') @@ -37,11 +35,11 @@ local Keybindings = { }, { Key = "F11", - Command = "openspace.time.setTime('1969 JUL 20 20:17:40');" .. + Command = "openspace.time.setTime('1969 JUL 20 20:17:40');" .. "openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.HeightLayers.LRO_NAC_Apollo_11.Enabled', true);" .. "openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.ColorLayers.A11_M177481212_p_longlat.Enabled', true);" .. "openspace.setPropertyValueSingle('Scene.Moon.Renderable.LodScaleFactor', 20.11);" .. - "openspace.setPropertyValue('NavigationHandler.OrbitalNavigator.Anchor', 'Apollo11LemModel');" .. + "openspace.setPropertyValue('NavigationHandler.OrbitalNavigator.Anchor', 'Apollo11LemPosition');" .. "openspace.setPropertyValue('NavigationHandler.OrbitalNavigator.RetargetAnchor', nil);" .. "openspace.setPropertyValueSingle('Scene.Apollo11MoonTrail.Renderable.Enabled', true);" .. "openspace.setPropertyValueSingle('Scene.Apollo11LemTrail.Renderable.Enabled', true);", @@ -82,8 +80,11 @@ asset.onInitialize(function () sceneHelper.bindKeys(Keybindings) - openspace.markInterestingNodes({ "Moon", "Apollo11LemModel", "Apollo17LemModel", "Apollo11", "Apollo11LunarLander" }) - + openspace.markInterestingNodes({ + "Moon", "Apollo11LemModel", "Apollo17LemModel", + "Apollo11", "Apollo11LunarLander", + -- "Station_2_Boulder2", "Station_6_Fragment1" + }) -- To enable both sites by default, uncomment these lines -- openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.ColorLayers.A17_travmap.BlendMode', 0.000000); -- openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.ColorLayers.A17_travmap.Enabled', true); @@ -95,12 +96,19 @@ asset.onInitialize(function () -- openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.ColorLayers.A17_station7.BlendMode', 0.000000); -- openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.HeightLayers.LRO_NAC_Apollo_11.Enabled', true); -- openspace.setPropertyValueSingle('Scene.Moon.Renderable.Layers.ColorLayers.A11_M177481212_p_longlat.Enabled', true); - + + openspace.setPropertyValueSingle('Scene.Apollo11LemDescentModel.Renderable.RotationVector', { 273.205475,6.904110,308.712311 }); + openspace.setPropertyValueSingle('Scene.Apollo11LemLandedModel.Renderable.RotationVector', { 273.205475,6.904110,308.712311 }); + openspace.globebrowsing.goToGeo(moonAsset.Moon.Identifier, 20, -60, 15000000) openspace.setPropertyValueSingle("Scene.Moon.Renderable.PerformShading", false) end) asset.onDeinitialize(function () - openspace.removeInterestingNodes({ "Moon", "Apollo11Lem", "Apollo17Lem", "Apollo11", "Apollo11LunarLander" }) + openspace.removeInterestingNodes({ + "Moon", "Apollo11Lem", "Apollo17Lem", + "Apollo11", "Apollo11LemPosition", + -- "Station_6_Fragment1", "Station_6_Fragments_2_3" + }) end) diff --git a/data/assets/scene/solarsystem/missions/apollo/a11_lem.asset b/data/assets/scene/solarsystem/missions/apollo/a11_lem.asset index 2a9182d715..05b81e0af4 100644 --- a/data/assets/scene/solarsystem/missions/apollo/a11_lem.asset +++ b/data/assets/scene/solarsystem/missions/apollo/a11_lem.asset @@ -15,8 +15,8 @@ local Apollo11Lem = { Globe = moonAsset.Moon.Identifier, Longitude = -360+23.47306, Latitude = 0.67402, - FixedAltitude = -1927.65, - UseFixedAltitude = true + Altitude = -1927.65, + UseHeightMap = false }, }, GUI = { diff --git a/data/assets/scene/solarsystem/missions/apollo/a17_lem.asset b/data/assets/scene/solarsystem/missions/apollo/a17_lem.asset index 9d6f403071..3a88c8cf75 100644 --- a/data/assets/scene/solarsystem/missions/apollo/a17_lem.asset +++ b/data/assets/scene/solarsystem/missions/apollo/a17_lem.asset @@ -14,6 +14,7 @@ local Apollo17Lem = { Globe = moonAsset.Moon.Identifier, Longitude = -329.22833, Latitude = 20.19092, + UseHeightmap = true }, }, GUI = { diff --git a/data/assets/scene/solarsystem/missions/apollo/apollo11.asset b/data/assets/scene/solarsystem/missions/apollo/apollo11.asset index 64f5dcd9bd..e07492b1e1 100644 --- a/data/assets/scene/solarsystem/missions/apollo/apollo11.asset +++ b/data/assets/scene/solarsystem/missions/apollo/apollo11.asset @@ -1,5 +1,8 @@ local assetHelper = asset.require('util/asset_helper') local sunTransforms = asset.require('scene/solarsystem/sun/transforms') +local descentKeyframes = asset.require('./apollo11_lem_descent.asset') +local descentRotationKeyframes = asset.require('./apollo11_lem_descent_rotation.asset') +local model = asset.require('scene/solarsystem/missions/apollo/lem_model') asset.require('spice/base') @@ -24,7 +27,7 @@ local kernels = { kernelsFolder .. '/apollo11_orbits_full9km.bsp', kernelsFolder .. '/apollo11_orbits_lm9km.bsp', } - +--landing - 1969-07-20T20:17:40 local apolloSpiceId = "-911" local apolloLemSpiceId = "-911500" @@ -107,81 +110,44 @@ local Apollo11MoonTrail = { } } --- Uncomment if you want to follow the mock decent --- local Apollo11LemPosition = { --- Identifier = "Apollo11LemPosition", --- Parent = "Moon", --- TimeFrame = { --- Type = "TimeFrameInterval", --- Start = "1969 JUL 20 19:10:25.183", --- End = "1969 JUL 20 20:17:46.183" --- }, --- Transform = { --- Translation = { --- Type = "SpiceTranslation", --- Target = apolloLemSpiceId, --- Observer = "MOON", --- Frame = "MOON_ME", --- Kernels = kernels --- }, --- }, --- GUI = { --- Hidden = true, --- Name = "Apollo 11 Lunar Lander Position", --- Path = "/Solar System/Missions/Apollo/11" --- } --- } --- local Apollo11LunarLanderModel = { --- Identifier = "Apollo11LunarLander", --- Parent = Apollo11LemPosition.Identifier, --- Transform = { --- Rotation = { --- Type = "StaticRotation", --- Rotation = {0.0, 0.0, -3.1415/2} --- }, --- Scale = { --- Type = "StaticScale", --- Scale = 100.0 --- } --- }, --- TimeFrame = { --- Type = "TimeFrameInterval", --- Start = "1969 JUL 20 19:10:25.183", --- End = "1969 JUL 20 20:17:46.183" --- }, --- Renderable = { --- Type = "RenderableModel", --- Geometry = { --- Type = "MultiModelGeometry", --- GeometryFile = modelFolder .. "/lem_nasa.obj" --- }, --- ColorTexture = modelFolder .. "/gray.png", --- LightSources = assetHelper.getDefaultLightSources(sunTransforms.SolarSystemBarycenter.Identifier) --- }, --- GUI = { --- Hidden = false, --- Name = "Apollo 11 Lunar Lander", --- Path = "/Solar System/Missions/Apollo/11" --- } --- } - -local Apollo11LemTrail = { - Identifier = "Apollo11LemTrail", - Parent = "Moon", - Renderable = { - Type = "RenderableTrailTrajectory", - Translation = { +local lemTranslation = { + Type = "TimelineTranslation", + Keyframes = { + -- 20:14:30 is an arbitrary cutoff, but last 4 minutes data in descentKeyframes + -- begins at 20.14.40. Due to linear interpolation, we will get + -- a 10s linear transition to the location where the descentKeyframes start. + ['1969 JUL 20 20:14:30'] = { Type = "SpiceTranslation", Target = apolloLemSpiceId, Observer = "MOON", Frame = "IAU_MOON", Kernels = kernels }, - Color = {0.780000,0.940000,0.340000 }, + ['1969 JUL 20 20:14:40'] = { + Type = "TimelineTranslation", + Keyframes = descentKeyframes.keyframes + } + } +} + +local lemRotation = { + Type = "TimelineRotation", + Keyframes = descentRotationKeyframes.keyframes +} + + + +local Apollo11LemTrail = { + Identifier = "Apollo11LemTrail", + Parent = "Moon", + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = lemTranslation, + Color = { 0.780000,0.940000,0.340000 }, StartTime = "1969 JUL 20 19:10:25.183", EndTime = "1969 JUL 20 20:17:46.183", - SampleInterval = 60, + SampleInterval = 2, EnableFade = false, Enabled = false, }, @@ -191,11 +157,91 @@ local Apollo11LemTrail = { } } +local Apollo11LemPosition = { + Identifier = "Apollo11LemPosition", + Parent = "Moon", + TimeFrame = { + Type = "TimeFrameInterval", + Start = "1969 JUL 20 19:10:25.183" + }, + Transform = { + Translation = lemTranslation, + Rotation = lemRotation + }, + GUI = { + Hidden = false, + Name = "Apollo 11 Lunar Lander Position", + Path = "/Solar System/Missions/Apollo/11" + } +} +--landing - 1969-07-20T20:17:40 + +local Apollo11LemDescentModel = { + Identifier = "Apollo11LemDescentModel", + Parent = Apollo11LemPosition.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "1969 JUL 19 19:38:29.183", + End = "1969 JUL 20 20:17:40.0" + }, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 0.24 + } + }, + Renderable = { + Type = "RenderableModel", + Geometry = { + Type = "MultiModelGeometry", + GeometryFile = model.modelFolder .. "/LM-2_ver2clean.obj" + }, + ColorTexture = model.modelFolder .. "/LM-2_ver2clean_u1_v1.jpeg", + LightSources = assetHelper.getDefaultLightSources(sunTransforms.SolarSystemBarycenter.Identifier) + }, + GUI = { + Hidden = false, + Name = "Apollo 11 Descent Lem", + Path = "/Solar System/Missions/Apollo/11" + } +} + +local Apollo11LemLandedModel = { + Identifier = "Apollo11LemLandedModel", + Parent = Apollo11LemPosition.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "1969 JUL 20 20:17:40.0" + }, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 0.24 + } + }, + Renderable = { + Type = "RenderableModel", + Geometry = { + Type = "MultiModelGeometry", + GeometryFile = model.modelFolder .. "/LM-2_ver2clean.obj" + }, + ColorTexture = model.modelFolder .. "/LM-2_ver2clean_u1_v1.jpeg", + LightSources = assetHelper.getDefaultLightSources(sunTransforms.SolarSystemBarycenter.Identifier) + }, + GUI = { + Hidden = false, + Name = "Apollo 11 Landed Lem", + Path = "/Solar System/Missions/Apollo/11" + } +} + + local exportList = { - Apollo11Position, - -- Apollo11LemPosition, + Apollo11Position, + Apollo11LemPosition, Apollo11Model, - -- Apollo11LunarLanderModel, + Apollo11LemDescentModel, + Apollo11LemLandedModel, Apollo11MoonTrail, Apollo11LemTrail, } diff --git a/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent.asset b/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent.asset new file mode 100644 index 0000000000..93128f5181 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent.asset @@ -0,0 +1,1835 @@ +-- The following keyframe data was converted from the_last_four_minutes_2019-06-09.kml, +-- which is available at http://apollo.mem-tek.com/GoogleMoonKMZ.html + +-- In the conversion, some assumptions and simplifications were made: +-- * The descent markers in the KML have Point nodes expressed "relative to ground" +-- We assume that the ground is fixed at altitude 1927.65 meters below the reference ellipsoid, +-- in order to match height data from a height map constructed from LRO data. +-- * We manually offset the coordiantes slightly, by 0.013496003622691433 degrees in longitude and -0.007472581881668883 degrees in latitude, +-- in order to match the landing spot specified at long: 23.47306, lat: 0.67402 extracted from footage from LRO. +-- The kml file provided 23.45956399637731, lat: 0.6814925818816688 as the landing coordinates - hence the manual offset. +-- If more accurate height/color maps are aqcuired, these values can be adjusted by running the conversion script again. +-- For more information, contact emil.axelsson@liu.se. + + +local keyframes = { + ['1969-07-20T20:13:40'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.64480784327766, + Latitude = 0.6899960896998255, + Altitude = -1546.3568594681615, + UseHeightmap = false + }, + ['1969-07-20T20:13:41'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.64371058653857, + Latitude = 0.6878218095380976, + Altitude = -1565.4215164947534, + UseHeightmap = false + }, + ['1969-07-20T20:13:42'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.64182673932963, + Latitude = 0.6868724573827948, + Altitude = -1565.4215164947534, + UseHeightmap = false + }, + ['1969-07-20T20:13:43'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.64054706630478, + Latitude = 0.6858670898943581, + Altitude = -1579.0391286566048, + UseHeightmap = false + }, + ['1969-07-20T20:13:44'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.63636509003987, + Latitude = 0.6869318608730292, + Altitude = -1579.0391286566048, + UseHeightmap = false + }, + ['1969-07-20T20:13:45'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.63333610553231, + Latitude = 0.6875049989808152, + Altitude = -1584.4861735213453, + UseHeightmap = false + }, + ['1969-07-20T20:13:46'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.630258198415152, + Latitude = 0.6879251024075629, + Altitude = -1587.2096959537155, + UseHeightmap = false + }, + ['1969-07-20T20:13:47'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.62944534804935, + Latitude = 0.6868614912680597, + Altitude = -1592.656740818456, + UseHeightmap = false + }, + ['1969-07-20T20:13:48'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.62679291745059, + Latitude = 0.6859161360075229, + Altitude = -1604.9125917641222, + UseHeightmap = false + }, + ['1969-07-20T20:13:49'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.624085315638872, + Latitude = 0.685126212476227, + Altitude = -1619.8919651421588, + UseHeightmap = false + }, + ['1969-07-20T20:13:50'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.62142772795633, + Latitude = 0.6848656185526153, + Altitude = -1630.7860548716399, + UseHeightmap = false + }, + ['1969-07-20T20:13:51'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.617193313827283, + Latitude = 0.6849603490017026, + Altitude = -1630.7860548716399, + UseHeightmap = false + }, + ['1969-07-20T20:13:52'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.61543137875974, + Latitude = 0.68523470439912, + Altitude = -1629.4242936554547, + UseHeightmap = false + }, + ['1969-07-20T20:13:53'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.61158202958536, + Latitude = 0.6853852597026965, + Altitude = -1633.5095773040102, + UseHeightmap = false + }, + ['1969-07-20T20:13:54'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.60991413189263, + Latitude = 0.6852537398149626, + Altitude = -1643.041905817306, + UseHeightmap = false + }, + ['1969-07-20T20:13:55'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.607915527643012, + Latitude = 0.6853963551830907, + Altitude = -1662.106562843898, + UseHeightmap = false + }, + ['1969-07-20T20:13:56'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.605996916437142, + Latitude = 0.6830167672762936, + Altitude = -1663.4683240600832, + UseHeightmap = false + }, + ['1969-07-20T20:13:57'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.6027345854584, + Latitude = 0.6824580715414034, + Altitude = -1671.09418687072, + UseHeightmap = false + }, + ['1969-07-20T20:13:58'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.60047452065999, + Latitude = 0.6837230890353062, + Altitude = -1671.638891357194, + UseHeightmap = false + }, + ['1969-07-20T20:13:59'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.598006245556462, + Latitude = 0.6851039272779041, + Altitude = -1670.277130141009, + UseHeightmap = false + }, + ['1969-07-20T20:14:00'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.594980604909782, + Latitude = 0.6859011120513393, + Altitude = -1683.8947423028603, + UseHeightmap = false + }, + ['1969-07-20T20:14:01'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.595085912567033, + Latitude = 0.685405665002322, + Altitude = -1698.874115680897, + UseHeightmap = false + }, + ['1969-07-20T20:14:02'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.5930664955042, + Latitude = 0.6852493785380211, + Altitude = -1701.597638113267, + UseHeightmap = false + }, + ['1969-07-20T20:14:03'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.591385100243283, + Latitude = 0.6848676328581234, + Altitude = -1709.768205410378, + UseHeightmap = false + }, + ['1969-07-20T20:14:04'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.58888799865371, + Latitude = 0.6847945134519827, + Altitude = -1717.9387727074889, + UseHeightmap = false + }, + ['1969-07-20T20:14:05'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.58707895840121, + Latitude = 0.6847997274847563, + Altitude = -1720.662295139859, + UseHeightmap = false + }, + ['1969-07-20T20:14:06'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.585134523523262, + Latitude = 0.6844679679748537, + Altitude = -1726.1093400045995, + UseHeightmap = false + }, + ['1969-07-20T20:14:07'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.58309233633901, + Latitude = 0.6845115405154798, + Altitude = -1730.194623653155, + UseHeightmap = false + }, + ['1969-07-20T20:14:08'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.581800658763132, + Latitude = 0.6837790677972603, + Altitude = -1737.0034297340808, + UseHeightmap = false + }, + ['1969-07-20T20:14:09'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.580055660445762, + Latitude = 0.6831436064664251, + Altitude = -1741.0887133826361, + UseHeightmap = false + }, + ['1969-07-20T20:14:10'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.57863282556605, + Latitude = 0.6828140286921376, + Altitude = -1749.259280679747, + UseHeightmap = false + }, + ['1969-07-20T20:14:11'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.57640031861404, + Latitude = 0.6825176811105468, + Altitude = -1751.9828031121174, + UseHeightmap = false + }, + ['1969-07-20T20:14:12'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.57398679174075, + Latitude = 0.6826876185178852, + Altitude = -1750.6210418959322, + UseHeightmap = false + }, + ['1969-07-20T20:14:13'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.57156483164977, + Latitude = 0.6825035088375115, + Altitude = -1758.7916091930429, + UseHeightmap = false + }, + ['1969-07-20T20:14:14'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.568805614344672, + Latitude = 0.6825830127392937, + Altitude = -1764.2386540577836, + UseHeightmap = false + }, + ['1969-07-20T20:14:15'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.56712274763365, + Latitude = 0.6821390846562359, + Altitude = -1764.2386540577836, + UseHeightmap = false + }, + ['1969-07-20T20:14:16'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.56530723506546, + Latitude = 0.6815597518028071, + Altitude = -1772.4092213548943, + UseHeightmap = false + }, + ['1969-07-20T20:14:17'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.56412162578659, + Latitude = 0.6811736246098009, + Altitude = -1773.7709825710795, + UseHeightmap = false + }, + ['1969-07-20T20:14:18'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.56276962682385, + Latitude = 0.6808738576281527, + Altitude = -1779.2180274358202, + UseHeightmap = false + }, + ['1969-07-20T20:14:19'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.560994966586822, + Latitude = 0.6806433210749815, + Altitude = -1781.9415498681901, + UseHeightmap = false + }, + ['1969-07-20T20:14:20'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.55943927760013, + Latitude = 0.680762500394614, + Altitude = -1788.7503559491158, + UseHeightmap = false + }, + ['1969-07-20T20:14:21'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.55808185917876, + Latitude = 0.6806932677701746, + Altitude = -1788.205651462642, + UseHeightmap = false + }, + ['1969-07-20T20:14:22'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.556393791415733, + Latitude = 0.6811207130416086, + Altitude = -1791.4738783814862, + UseHeightmap = false + }, + ['1969-07-20T20:14:23'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.55496480157647, + Latitude = 0.6814204204715102, + Altitude = -1792.8356395976714, + UseHeightmap = false + }, + ['1969-07-20T20:14:24'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.55306742293409, + Latitude = 0.6817752241315425, + Altitude = -1795.5591620300418, + UseHeightmap = false + }, + ['1969-07-20T20:14:25'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.55137129589691, + Latitude = 0.6815869620825672, + Altitude = -1802.3679681109675, + UseHeightmap = false + }, + ['1969-07-20T20:14:26'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54977453252549, + Latitude = 0.681089420496018, + Altitude = -1805.0914905433376, + UseHeightmap = false + }, + ['1969-07-20T20:14:27'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.548083879890072, + Latitude = 0.6807962459602379, + Altitude = -1807.8150129757078, + UseHeightmap = false + }, + ['1969-07-20T20:14:28'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.546540200146502, + Latitude = 0.6805000865197504, + Altitude = -1810.5385354080781, + UseHeightmap = false + }, + ['1969-07-20T20:14:29'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54516644867878, + Latitude = 0.6804026508636472, + Altitude = -1815.9855802728187, + UseHeightmap = false + }, + ['1969-07-20T20:14:30'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54408346592703, + Latitude = 0.6805503084088244, + Altitude = -1817.3473414890038, + UseHeightmap = false + }, + ['1969-07-20T20:14:31'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54339758182375, + Latitude = 0.6804859303352504, + Altitude = -1818.709102705189, + UseHeightmap = false + }, + ['1969-07-20T20:14:32'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54194570925206, + Latitude = 0.6803064377127922, + Altitude = -1821.4326251375592, + UseHeightmap = false + }, + ['1969-07-20T20:14:33'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.54085221251783, + Latitude = 0.6801546546560774, + Altitude = -1824.9732042996407, + UseHeightmap = false + }, + ['1969-07-20T20:14:34'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.53954140597472, + Latitude = 0.6797325898259152, + Altitude = -1827.696726732011, + UseHeightmap = false + }, + ['1969-07-20T20:14:35'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.537934104316932, + Latitude = 0.679569186740729, + Altitude = -1831.7820103805664, + UseHeightmap = false + }, + ['1969-07-20T20:14:36'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.53689199133522, + Latitude = 0.6794114031790662, + Altitude = -1833.6884760832256, + UseHeightmap = false + }, + ['1969-07-20T20:14:37'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.53536814560564, + Latitude = 0.6791732992510942, + Altitude = -1836.9567030020698, + UseHeightmap = false + }, + ['1969-07-20T20:14:38'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.53395331216349, + Latitude = 0.6792039275673737, + Altitude = -1839.4078731912032, + UseHeightmap = false + }, + ['1969-07-20T20:14:39'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.53275788877434, + Latitude = 0.6790059399149831, + Altitude = -1840.497282164151, + UseHeightmap = false + }, + ['1969-07-20T20:14:40'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.531279977460432, + Latitude = 0.6788794363528592, + Altitude = -1844.5825658127067, + UseHeightmap = false + }, + ['1969-07-20T20:14:41'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.52959475512685, + Latitude = 0.6788906739797406, + Altitude = -1845.9443270288918, + UseHeightmap = false + }, + ['1969-07-20T20:14:42'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.52769228385669, + Latitude = 0.6787279693068425, + Altitude = -1848.123144974788, + UseHeightmap = false + }, + ['1969-07-20T20:14:43'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.52685377337869, + Latitude = 0.6787634478561919, + Altitude = -1850.8466674071583, + UseHeightmap = false + }, + ['1969-07-20T20:14:44'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.526284004538702, + Latitude = 0.6785694853441325, + Altitude = -1853.0254853530546, + UseHeightmap = false + }, + ['1969-07-20T20:14:45'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.5258419320743, + Latitude = 0.6784720829848033, + Altitude = -1852.2084286233435, + UseHeightmap = false + }, + ['1969-07-20T20:14:46'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.524906401275462, + Latitude = 0.6784174518581257, + Altitude = -1855.7490077854247, + UseHeightmap = false + }, + ['1969-07-20T20:14:47'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.52349915098792, + Latitude = 0.6782893729810321, + Altitude = -1857.383121244847, + UseHeightmap = false + }, + ['1969-07-20T20:14:48'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.522315823805602, + Latitude = 0.6780556991046269, + Altitude = -1859.5619391907433, + UseHeightmap = false + }, + ['1969-07-20T20:14:49'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.52101739233993, + Latitude = 0.6779647310824661, + Altitude = -1862.2854616231134, + UseHeightmap = false + }, + ['1969-07-20T20:14:50'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.51994166433182, + Latitude = 0.6778711676787862, + Altitude = -1864.7366318122467, + UseHeightmap = false + }, + ['1969-07-20T20:14:51'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.51898851685442, + Latitude = 0.6778817565177891, + Altitude = -1866.643097514906, + UseHeightmap = false + }, + ['1969-07-20T20:14:52'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.51808183367586, + Latitude = 0.6778718533214779, + Altitude = -1868.821915460802, + UseHeightmap = false + }, + ['1969-07-20T20:14:53'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.517315195124922, + Latitude = 0.6777409244088132, + Altitude = -1869.6389721905132, + UseHeightmap = false + }, + ['1969-07-20T20:14:54'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.516423288093712, + Latitude = 0.6776383502937863, + Altitude = -1872.0901423796465, + UseHeightmap = false + }, + ['1969-07-20T20:14:55'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.515618488386473, + Latitude = 0.6775904175972421, + Altitude = -1873.7242558390685, + UseHeightmap = false + }, + ['1969-07-20T20:14:56'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.514931748492103, + Latitude = 0.677451729714544, + Altitude = -1875.0860170552537, + UseHeightmap = false + }, + ['1969-07-20T20:14:57'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.5141592094038, + Latitude = 0.6774090469390076, + Altitude = -1876.1754260282019, + UseHeightmap = false + }, + ['1969-07-20T20:14:58'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.513268517407862, + Latitude = 0.677380792748438, + Altitude = -1878.3542439740982, + UseHeightmap = false + }, + ['1969-07-20T20:14:59'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.51249864236425, + Latitude = 0.6773301671802587, + Altitude = -1878.8989484605722, + UseHeightmap = false + }, + ['1969-07-20T20:15:00'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.511670817073732, + Latitude = 0.6773498341149018, + Altitude = -1879.9883574335202, + UseHeightmap = false + }, + ['1969-07-20T20:15:01'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.510927468201952, + Latitude = 0.6773124695718212, + Altitude = -1881.0777664064683, + UseHeightmap = false + }, + ['1969-07-20T20:15:02'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.510140364179833, + Latitude = 0.6772452153026853, + Altitude = -1882.9842321091276, + UseHeightmap = false + }, + ['1969-07-20T20:15:03'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50940612514804, + Latitude = 0.6772084204274821, + Altitude = -1884.3459933253127, + UseHeightmap = false + }, + ['1969-07-20T20:15:04'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.508556629045042, + Latitude = 0.6771417022964165, + Altitude = -1885.1630500550239, + UseHeightmap = false + }, + ['1969-07-20T20:15:05'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.5078270022667, + Latitude = 0.6770996409435569, + Altitude = -1885.707754541498, + UseHeightmap = false + }, + ['1969-07-20T20:15:06'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50712374883535, + Latitude = 0.6770942256987497, + Altitude = -1886.7971635144459, + UseHeightmap = false + }, + ['1969-07-20T20:15:07'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50638631083077, + Latitude = 0.6770208020089364, + Altitude = -1888.158924730631, + UseHeightmap = false + }, + ['1969-07-20T20:15:08'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50572166907488, + Latitude = 0.6769421116864789, + Altitude = -1888.431276973868, + UseHeightmap = false + }, + ['1969-07-20T20:15:09'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.505080467779102, + Latitude = 0.6769068207439769, + Altitude = -1889.5206859468162, + UseHeightmap = false + }, + ['1969-07-20T20:15:10'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.504394828536693, + Latitude = 0.6768437996516232, + Altitude = -1890.6100949197644, + UseHeightmap = false + }, + ['1969-07-20T20:15:11'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50370057106609, + Latitude = 0.6767452474349132, + Altitude = -1891.9718561359496, + UseHeightmap = false + }, + ['1969-07-20T20:15:12'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.503056349392182, + Latitude = 0.6766723806693259, + Altitude = -1893.3336173521345, + UseHeightmap = false + }, + ['1969-07-20T20:15:13'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50246925266341, + Latitude = 0.6766252349202276, + Altitude = -1893.8783218386086, + UseHeightmap = false + }, + ['1969-07-20T20:15:14'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50184956306549, + Latitude = 0.6765535257068991, + Altitude = -1894.9677308115567, + UseHeightmap = false + }, + ['1969-07-20T20:15:15'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.501422630419572, + Latitude = 0.6765112802947014, + Altitude = -1894.1506740818456, + UseHeightmap = false + }, + ['1969-07-20T20:15:16'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50104221348722, + Latitude = 0.676487362071662, + Altitude = -1893.8783218386086, + UseHeightmap = false + }, + ['1969-07-20T20:15:17'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50076948252455, + Latitude = 0.6764658967447386, + Altitude = -1892.2442083791866, + UseHeightmap = false + }, + ['1969-07-20T20:15:18'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.50013364513089, + Latitude = 0.6764482060496164, + Altitude = -1893.3336173521345, + UseHeightmap = false + }, + ['1969-07-20T20:15:19'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.499460285339502, + Latitude = 0.6764309028737, + Altitude = -1894.9677308115567, + UseHeightmap = false + }, + ['1969-07-20T20:15:20'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.498899330647752, + Latitude = 0.6763755753041285, + Altitude = -1896.057139784505, + UseHeightmap = false + }, + ['1969-07-20T20:15:21'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49826864115494, + Latitude = 0.6763489810183512, + Altitude = -1896.601844270979, + UseHeightmap = false + }, + ['1969-07-20T20:15:22'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49765193973772, + Latitude = 0.6763177659437667, + Altitude = -1897.41890100069, + UseHeightmap = false + }, + ['1969-07-20T20:15:23'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49706547748806, + Latitude = 0.6762368192356724, + Altitude = -1898.2359577304012, + UseHeightmap = false + }, + ['1969-07-20T20:15:24'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.496489420526313, + Latitude = 0.676209886695223, + Altitude = -1899.053014460112, + UseHeightmap = false + }, + ['1969-07-20T20:15:25'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.495878153012562, + Latitude = 0.6761763249034947, + Altitude = -1900.1424234330602, + UseHeightmap = false + }, + ['1969-07-20T20:15:26'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.4953425244022, + Latitude = 0.6761311089575274, + Altitude = -1901.5041846492454, + UseHeightmap = false + }, + ['1969-07-20T20:15:27'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.494725217962213, + Latitude = 0.6761017566851846, + Altitude = -1902.5935936221936, + UseHeightmap = false + }, + ['1969-07-20T20:15:28'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.494112443564592, + Latitude = 0.6760842983575135, + Altitude = -1903.4106503519047, + UseHeightmap = false + }, + ['1969-07-20T20:15:29'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.493537644480202, + Latitude = 0.6760386448926926, + Altitude = -1903.9553548383788, + UseHeightmap = false + }, + ['1969-07-20T20:15:30'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49299719757025, + Latitude = 0.6760147528943234, + Altitude = -1903.9553548383788, + UseHeightmap = false + }, + ['1969-07-20T20:15:31'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.492415313069813, + Latitude = 0.6759919962423392, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:32'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.491877755110142, + Latitude = 0.6759640721591937, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:33'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49128819308786, + Latitude = 0.6759491077295323, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:34'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.49073158429634, + Latitude = 0.6759379383686839, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:35'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.490174891596332, + Latitude = 0.6759054634588104, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:36'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.489635065407523, + Latitude = 0.6758939648884956, + Altitude = -1904.5000593248528, + UseHeightmap = false + }, + ['1969-07-20T20:15:37'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.4891060535486, + Latitude = 0.6759004097281942, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:38'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48855436619652, + Latitude = 0.6758862600165565, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:39'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.488052711552413, + Latitude = 0.6758544116957282, + Altitude = -1904.5000593248528, + UseHeightmap = false + }, + ['1969-07-20T20:15:40'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48754943516269, + Latitude = 0.6758316193430558, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:41'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.487094304824993, + Latitude = 0.6758175052522961, + Altitude = -1904.2277070816158, + UseHeightmap = false + }, + ['1969-07-20T20:15:42'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.486618165034592, + Latitude = 0.6757757367756437, + Altitude = -1904.7724115680899, + UseHeightmap = false + }, + ['1969-07-20T20:15:43'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48604740534131, + Latitude = 0.675733428263931, + Altitude = -1905.3171160545637, + UseHeightmap = false + }, + ['1969-07-20T20:15:44'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48548248435554, + Latitude = 0.6756797157749009, + Altitude = -1905.8618205410378, + UseHeightmap = false + }, + ['1969-07-20T20:15:45'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48494957486896, + Latitude = 0.6756120527881188, + Altitude = -1905.8618205410378, + UseHeightmap = false + }, + ['1969-07-20T20:15:46'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.484598386683622, + Latitude = 0.675584857481579, + Altitude = -1907.49593400046, + UseHeightmap = false + }, + ['1969-07-20T20:15:47'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.4841269963268, + Latitude = 0.6755482784409179, + Altitude = -1908.040638486934, + UseHeightmap = false + }, + ['1969-07-20T20:15:48'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48373390336955, + Latitude = 0.6754890811171497, + Altitude = -1908.8576952166452, + UseHeightmap = false + }, + ['1969-07-20T20:15:49'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48325134882829, + Latitude = 0.6754258626149947, + Altitude = -1908.4491668517896, + UseHeightmap = false + }, + ['1969-07-20T20:15:50'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48284574619883, + Latitude = 0.6753753196460469, + Altitude = -1909.1300474598822, + UseHeightmap = false + }, + ['1969-07-20T20:15:51'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48245362823393, + Latitude = 0.6753264776464533, + Altitude = -1909.4023997031193, + UseHeightmap = false + }, + ['1969-07-20T20:15:52'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.482060114185842, + Latitude = 0.6752749804130574, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:53'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.481698202127482, + Latitude = 0.675223605520775, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:54'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48129046365451, + Latitude = 0.6751730022703166, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:55'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.480893026154902, + Latitude = 0.6751376710849429, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:56'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48059324160945, + Latitude = 0.6750772226256051, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:57'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48034984354739, + Latitude = 0.6750430267458865, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:58'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.48005268645993, + Latitude = 0.6750019848756621, + Altitude = -1909.6747519463563, + UseHeightmap = false + }, + ['1969-07-20T20:15:59'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47978070153665, + Latitude = 0.6749655364121049, + Altitude = -1909.9471041895933, + UseHeightmap = false + }, + ['1969-07-20T20:16:00'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47951311851127, + Latitude = 0.6749420304945992, + Altitude = -1909.9471041895933, + UseHeightmap = false + }, + ['1969-07-20T20:16:01'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47927978098579, + Latitude = 0.6748989409040068, + Altitude = -1909.9471041895933, + UseHeightmap = false + }, + ['1969-07-20T20:16:02'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47904250519933, + Latitude = 0.6748472712728636, + Altitude = -1910.4918086760674, + UseHeightmap = false + }, + ['1969-07-20T20:16:03'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47879202998348, + Latitude = 0.674809514541568, + Altitude = -1910.7641609193045, + UseHeightmap = false + }, + ['1969-07-20T20:16:04'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.478567222437622, + Latitude = 0.6747692774477394, + Altitude = -1910.7641609193045, + UseHeightmap = false + }, + ['1969-07-20T20:16:05'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47836548542964, + Latitude = 0.6747160116119115, + Altitude = -1910.7641609193045, + UseHeightmap = false + }, + ['1969-07-20T20:16:06'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47818769774975, + Latitude = 0.6746866473279819, + Altitude = -1911.3088654057785, + UseHeightmap = false + }, + ['1969-07-20T20:16:07'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.477896613823983, + Latitude = 0.6746547793250971, + Altitude = -1913.2153311084376, + UseHeightmap = false + }, + ['1969-07-20T20:16:08'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47781195503974, + Latitude = 0.6746276583132307, + Altitude = -1913.2153311084376, + UseHeightmap = false + }, + ['1969-07-20T20:16:09'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.477664452707373, + Latitude = 0.6746112868414526, + Altitude = -1914.0323878381487, + UseHeightmap = false + }, + -- ['1969-07-20T20:16:10'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.477750217762413, + -- Latitude = 0.6745910947360472, + -- Altitude = -1912.6706266219635, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:11'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.477590925415402, + -- Latitude = 0.6745598993839581, + -- Altitude = -1912.6706266219635, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:12'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47745952757753, + -- Latitude = 0.6745298610932787, + -- Altitude = -1912.6706266219635, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:13'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.477271343369093, + -- Latitude = 0.6745166392893209, + -- Altitude = -1913.2153311084376, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:14'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.477100932665042, + -- Latitude = 0.6744937499451563, + -- Altitude = -1914.3047400813857, + -- UseHeightmap = false + -- }, + ['1969-07-20T20:16:15'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47697690593997, + Latitude = 0.6744644602883288, + Altitude = -1914.8494445678598, + UseHeightmap = false + }, + ['1969-07-20T20:16:16'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.476842953277412, + Latitude = 0.6744457159538018, + Altitude = -1915.1217968110968, + UseHeightmap = false + }, + ['1969-07-20T20:16:17'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.476774052091812, + Latitude = 0.6744243634139203, + Altitude = -1914.8494445678598, + UseHeightmap = false + }, + ['1969-07-20T20:16:18'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47665204889191, + Latitude = 0.6743981221140924, + Altitude = -1915.1217968110968, + UseHeightmap = false + }, + ['1969-07-20T20:16:19'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47657652039885, + Latitude = 0.6743808573601865, + Altitude = -1915.1217968110968, + UseHeightmap = false + }, + ['1969-07-20T20:16:20'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.476475036022492, + Latitude = 0.6743552389834175, + Altitude = -1914.8494445678598, + UseHeightmap = false + }, + ['1969-07-20T20:16:21'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47638671770867, + Latitude = 0.6743412077411113, + Altitude = -1915.3941490543339, + UseHeightmap = false + }, + ['1969-07-20T20:16:22'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.476286834646782, + Latitude = 0.6743241644041175, + Altitude = -1915.3941490543339, + UseHeightmap = false + }, + ['1969-07-20T20:16:23'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47623840477727, + Latitude = 0.6743121023448013, + Altitude = -1915.3941490543339, + UseHeightmap = false + }, + ['1969-07-20T20:16:24'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.476125794037742, + Latitude = 0.6743019779643423, + Altitude = -1915.938853540808, + UseHeightmap = false + }, + ['1969-07-20T20:16:25'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47604582826371, + Latitude = 0.6742984062330349, + Altitude = -1916.211205784045, + UseHeightmap = false + }, + ['1969-07-20T20:16:26'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47599605084473, + Latitude = 0.6742864748966985, + Altitude = -1916.211205784045, + UseHeightmap = false + }, + ['1969-07-20T20:16:27'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47598166921822, + Latitude = 0.6742856341308172, + Altitude = -1916.755910270519, + UseHeightmap = false + }, + -- ['1969-07-20T20:16:28'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47600003592791, + -- Latitude = 0.6742816108377042, + -- Altitude = -1916.211205784045, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:29'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47593990066764, + -- Latitude = 0.6742699316275284, + -- Altitude = -1916.483558027282, + -- UseHeightmap = false + -- }, + ['1969-07-20T20:16:30'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47587957412098, + Latitude = 0.6742661771136219, + Altitude = -1916.755910270519, + UseHeightmap = false + }, + ['1969-07-20T20:16:31'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47579282136856, + Latitude = 0.6742214263433656, + Altitude = -1917.028262513756, + UseHeightmap = false + }, + ['1969-07-20T20:16:32'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47571834266516, + Latitude = 0.6741885448706321, + Altitude = -1917.5729670002302, + UseHeightmap = false + }, + -- ['1969-07-20T20:16:33'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47569457676149, + -- Latitude = 0.6741859152655852, + -- Altitude = -1917.3006147569931, + -- UseHeightmap = false + -- }, + ['1969-07-20T20:16:34'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47557041293751, + Latitude = 0.6741798073326593, + Altitude = -1918.117671486704, + UseHeightmap = false + }, + ['1969-07-20T20:16:35'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.475475681892203, + Latitude = 0.6741822414281841, + Altitude = -1918.117671486704, + UseHeightmap = false + }, + ['1969-07-20T20:16:36'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47541533097675, + Latitude = 0.6742009046793005, + Altitude = -1918.390023729941, + UseHeightmap = false + }, + ['1969-07-20T20:16:37'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47532207549478, + Latitude = 0.6742269926054295, + Altitude = -1918.662375973178, + UseHeightmap = false + }, + ['1969-07-20T20:16:38'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47522251798864, + Latitude = 0.6742695236577596, + Altitude = -1918.662375973178, + UseHeightmap = false + }, + ['1969-07-20T20:16:39'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47513564425997, + Latitude = 0.6742809051574165, + Altitude = -1918.662375973178, + UseHeightmap = false + }, + ['1969-07-20T20:16:40'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47498810518855, + Latitude = 0.6743095342428154, + Altitude = -1920.2964894326003, + UseHeightmap = false + }, + -- ['1969-07-20T20:16:41'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47489523759891, + -- Latitude = 0.6743154022599566, + -- Altitude = -1920.0241371893633, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:42'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47479438729774, + -- Latitude = 0.6743324078003049, + -- Altitude = -1920.2964894326003, + -- UseHeightmap = false + -- }, + -- ['1969-07-20T20:16:43'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47475788126512, + -- Latitude = 0.674345583979325, + -- Altitude = -1920.0241371893633, + -- UseHeightmap = false + -- }, + ['1969-07-20T20:16:44'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.474678823712882, + Latitude = 0.6743691203511213, + Altitude = -1920.2964894326003, + UseHeightmap = false + }, + ['1969-07-20T20:16:45'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47460302474115, + Latitude = 0.6743890347121807, + Altitude = -1920.2964894326003, + UseHeightmap = false + }, + ['1969-07-20T20:16:46'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47450130965027, + Latitude = 0.6744202280781089, + Altitude = -1920.8411939190744, + UseHeightmap = false + }, + ['1969-07-20T20:16:47'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.474379586340042, + Latitude = 0.6744490653475903, + Altitude = -1921.1135461623114, + UseHeightmap = false + }, + ['1969-07-20T20:16:48'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47431921657337, + Latitude = 0.6745028925523043, + Altitude = -1921.1135461623114, + UseHeightmap = false + }, + ['1969-07-20T20:16:49'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47424698504895, + Latitude = 0.6745115395661241, + Altitude = -1921.1135461623114, + UseHeightmap = false + }, + ['1969-07-20T20:16:50'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.474158028620153, + Latitude = 0.6745268900936557, + Altitude = -1921.6582506487855, + UseHeightmap = false + }, + ['1969-07-20T20:16:51'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47408003386958, + Latitude = 0.674531434078838, + Altitude = -1921.6582506487855, + UseHeightmap = false + }, + ['1969-07-20T20:16:52'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473993195514502, + Latitude = 0.6745434127092755, + Altitude = -1921.9306028920225, + UseHeightmap = false + }, + -- ['1969-07-20T20:16:53'] = { + -- Type = "GlobeTranslation", + -- Globe = "Moon", + -- Longitude = 23.47392353665608, + -- Latitude = 0.6745464032805983, + -- Altitude = -1922.2029551352596, + -- UseHeightmap = false + -- }, + ['1969-07-20T20:16:54'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47388537487237, + Latitude = 0.674552865152663, + Altitude = -1921.9306028920225, + UseHeightmap = false + }, + ['1969-07-20T20:16:55'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47382957912373, + Latitude = 0.6745443566727537, + Altitude = -1921.9306028920225, + UseHeightmap = false + }, + ['1969-07-20T20:16:56'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47378652829031, + Latitude = 0.6745361955127924, + Altitude = -1921.6582506487855, + UseHeightmap = false + }, + ['1969-07-20T20:16:57'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473741159081282, + Latitude = 0.6745139398577651, + Altitude = -1921.6582506487855, + UseHeightmap = false + }, + ['1969-07-20T20:16:58'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473674434325403, + Latitude = 0.6745046665169872, + Altitude = -1922.2029551352596, + UseHeightmap = false + }, + ['1969-07-20T20:16:59'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47366202033169, + Latitude = 0.6744553774680945, + Altitude = -1922.2029551352596, + UseHeightmap = false + }, + ['1969-07-20T20:17:00'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47360771579434, + Latitude = 0.6744345598586292, + Altitude = -1922.7476596217336, + UseHeightmap = false + }, + ['1969-07-20T20:17:01'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47357090816817, + Latitude = 0.6744054827778567, + Altitude = -1923.0200118649707, + UseHeightmap = false + }, + ['1969-07-20T20:17:02'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47354290217646, + Latitude = 0.6743765403194303, + Altitude = -1923.2923641082077, + UseHeightmap = false + }, + ['1969-07-20T20:17:03'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47354640286736, + Latitude = 0.6743332580785223, + Altitude = -1923.5647163514448, + UseHeightmap = false + }, + ['1969-07-20T20:17:04'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473541367503802, + Latitude = 0.6742974556070759, + Altitude = -1923.8370685946818, + UseHeightmap = false + }, + ['1969-07-20T20:17:05'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47350854369485, + Latitude = 0.6742858449512636, + Altitude = -1924.1094208379188, + UseHeightmap = false + }, + ['1969-07-20T20:17:06'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47347424911663, + Latitude = 0.6742611487873781, + Altitude = -1924.6541253243927, + UseHeightmap = false + }, + ['1969-07-20T20:17:07'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473503629496022, + Latitude = 0.6742462694505276, + Altitude = -1924.6541253243927, + UseHeightmap = false + }, + ['1969-07-20T20:17:08'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473512768546712, + Latitude = 0.6742384048959066, + Altitude = -1924.6541253243927, + UseHeightmap = false + }, + ['1969-07-20T20:17:09'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47353343175876, + Latitude = 0.6742241072273591, + Altitude = -1924.3817730811559, + UseHeightmap = false + }, + ['1969-07-20T20:17:10'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47353316391657, + Latitude = 0.6742142580747189, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:11'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47355774790429, + Latitude = 0.6742015107317392, + Altitude = -1924.9264775676297, + UseHeightmap = false + }, + ['1969-07-20T20:17:12'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.4735540335665, + Latitude = 0.6741800864866416, + Altitude = -1924.9264775676297, + UseHeightmap = false + }, + ['1969-07-20T20:17:13'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47353500681606, + Latitude = 0.6741617950501063, + Altitude = -1925.1988298108668, + UseHeightmap = false + }, + ['1969-07-20T20:17:14'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47350664772458, + Latitude = 0.6741447111551033, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:15'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473494757982273, + Latitude = 0.6741430011390509, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:16'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473485349949943, + Latitude = 0.6741431504511513, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:17'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473464448566723, + Latitude = 0.674141681840806, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:18'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47344203973089, + Latitude = 0.6741518055278933, + Altitude = -1925.4711820541038, + UseHeightmap = false + }, + ['1969-07-20T20:17:19'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473416197134252, + Latitude = 0.6741705280217748, + Altitude = -1925.7435342973408, + UseHeightmap = false + }, + ['1969-07-20T20:17:20'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47339416150648, + Latitude = 0.6741799656622618, + Altitude = -1925.7435342973408, + UseHeightmap = false + }, + ['1969-07-20T20:17:21'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.4733232813815, + Latitude = 0.6741727841821631, + Altitude = -1926.288238783815, + UseHeightmap = false + }, + ['1969-07-20T20:17:24'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47324174890097, + Latitude = 0.6742091863213222, + Altitude = -1926.288238783815, + UseHeightmap = false + }, + ['1969-07-20T20:17:27'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47317556908458, + Latitude = 0.6742072669430229, + Altitude = -1926.560591027052, + UseHeightmap = false + }, + ['1969-07-20T20:17:30'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47310752310149, + Latitude = 0.6742134078571678, + Altitude = -1926.832943270289, + UseHeightmap = false + }, + ['1969-07-20T20:17:32'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.473074792306253, + Latitude = 0.6741925230045956, + Altitude = -1927.105295513526, + UseHeightmap = false + }, + ['1969-07-20T20:17:40'] = { + Type = "GlobeTranslation", + Globe = "Moon", + Longitude = 23.47306, + Latitude = 0.67402, + Altitude = -1927.65, + UseHeightmap = false + }, +}; + +asset.export('keyframes', keyframes); + diff --git a/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent_rotation.asset b/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent_rotation.asset new file mode 100644 index 0000000000..2c45cb9d0f --- /dev/null +++ b/data/assets/scene/solarsystem/missions/apollo/apollo11_lem_descent_rotation.asset @@ -0,0 +1,1587 @@ +asset.export('keyframes', { + -- ['1969-7-20T20:9:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3815, -0.0048, -0.4891} + -- }, + -- ['1969-7-20T20:9:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3773, 0.0042, -0.3557} + -- }, + -- ['1969-7-20T20:9:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3677, 0.0184, -0.2218} + -- }, + -- ['1969-7-20T20:9:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3606, -0.0117, -0.0861} + -- }, + -- ['1969-7-20T20:10:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3587, -0.0222, -0.0219} + -- }, + -- ['1969-7-20T20:10:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3622, -0.0207, -0.0533} + -- }, + -- ['1969-7-20T20:10:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3639, -0.0032, -0.0640} + -- }, + -- ['1969-7-20T20:10:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3612, 0.0178, -0.0685} + -- }, + -- ['1969-7-20T20:10:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3571, 0.0196, -0.0796} + -- }, + -- ['1969-7-20T20:10:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3484, 0.0029, -0.0913} + -- }, + -- ['1969-7-20T20:10:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3597, -0.0149, -0.0832} + -- }, + -- ['1969-7-20T20:10:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3587, -0.0220, -0.0679} + -- }, + -- ['1969-7-20T20:10:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3482, -0.0121, -0.0736} + -- }, + -- ['1969-7-20T20:10:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3520, -0.0098, -0.0876} + -- }, + -- ['1969-7-20T20:10:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3503, -0.0240, -0.0872} + -- }, + -- ['1969-7-20T20:10:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3470, 0.0245, -0.0545} + -- }, + -- ['1969-7-20T20:10:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3420, 0.0115, -0.0518} + -- }, + -- ['1969-7-20T20:10:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3294, -0.0153, -0.0556} + -- }, + -- ['1969-7-20T20:10:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3399, -0.0136, -0.0573} + -- }, + -- ['1969-7-20T20:10:33'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3459, 0.0002, -0.0569} + -- }, + -- ['1969-7-20T20:10:35'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3440, 0.0012, -0.0542} + -- }, + -- ['1969-7-20T20:10:37'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3230, -0.0096, -0.0527} + -- }, + -- ['1969-7-20T20:10:39'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2966, -0.0119, -0.0510} + -- }, + -- ['1969-7-20T20:10:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3146, -0.0040, -0.0504} + -- }, + -- ['1969-7-20T20:10:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.3355, -0.0015, -0.0514} + -- }, + -- ['1969-7-20T20:10:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2916, 0.0061, -0.0516} + -- }, + -- ['1969-7-20T20:10:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2901, -0.0257, -0.0516} + -- }, + -- ['1969-7-20T20:10:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2818, -0.0123, -0.0495} + -- }, + -- ['1969-7-20T20:10:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2682, 0.0058, -0.0477} + -- }, + -- ['1969-7-20T20:10:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2732, 0.0035, -0.0195} + -- }, + -- ['1969-7-20T20:10:54'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2740, 0.0029, 0.0123} + -- }, + -- ['1969-7-20T20:10:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2778, 0.0035, 0.0234} + -- }, + -- ['1969-7-20T20:10:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2573, 0.0069, 0.0174} + -- }, + -- ['1969-7-20T20:10:58'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2515, -0.0023, 0.0115} + -- }, + -- ['1969-7-20T20:10:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2333, -0.0092, 0.0092} + -- }, + -- ['1969-7-20T20:11:0'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2191, -0.0157, 0.0056} + -- }, + -- ['1969-7-20T20:11:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2246, -0.0195, 0.0029} + -- }, + -- ['1969-7-20T20:11:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2419, -0.0146, -0.0019} + -- }, + -- ['1969-7-20T20:11:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2274, -0.0054, -0.0048} + -- }, + -- ['1969-7-20T20:11:6'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2218, -0.0042, -0.0056} + -- }, + -- ['1969-7-20T20:11:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2047, 0.0010, -0.0065} + -- }, + -- ['1969-7-20T20:11:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2042, -0.0054, -0.0069} + -- }, + -- ['1969-7-20T20:11:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2007, -0.0100, -0.0077} + -- }, + -- ['1969-7-20T20:11:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2136, -0.0173, -0.0077} + -- }, + -- ['1969-7-20T20:11:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.2013, -0.0021, -0.0077} + -- }, + -- ['1969-7-20T20:11:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1928, 0.0102, -0.0056} + -- }, + -- ['1969-7-20T20:11:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1854, 0.0090, -0.0057} + -- }, + -- ['1969-7-20T20:11:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1856, -0.0075, -0.0044} + -- }, + -- ['1969-7-20T20:11:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1670, -0.0157, -0.0023} + -- }, + -- ['1969-7-20T20:11:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1599, -0.0149, 0.0012} + -- }, + -- ['1969-7-20T20:11:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1514, -0.0119, 0.0012} + -- }, + -- ['1969-7-20T20:11:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1465, -0.0094, 0.0040} + -- }, + -- ['1969-7-20T20:11:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1593, -0.0176, 0.0063} + -- }, + -- ['1969-7-20T20:11:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1712, -0.0144, 0.0132} + -- }, + -- ['1969-7-20T20:11:24'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1727, -0.0052, 0.0176} + -- }, + -- ['1969-7-20T20:11:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1652, 0.0083, 0.0190} + -- }, + -- ['1969-7-20T20:11:26'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1827, -0.0044, 0.0178} + -- }, + -- ['1969-7-20T20:11:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1942, -0.0172, 0.0180} + -- }, + -- ['1969-7-20T20:11:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1788, -0.0071, 0.0188} + -- }, + -- ['1969-7-20T20:11:30'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1639, 0.0035, 0.0176} + -- }, + -- ['1969-7-20T20:11:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1614, 0.0048, 0.0178} + -- }, + -- ['1969-7-20T20:11:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1551, 0.0083, 0.0169} + -- }, + -- ['1969-7-20T20:11:33'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1643, 0.0060, 0.0175} + -- }, + -- ['1969-7-20T20:11:35'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1746, 0.0006, 0.0173} + -- }, + -- ['1969-7-20T20:11:35'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1679, -0.0008, 0.0178} + -- }, + -- ['1969-7-20T20:11:37'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1735, -0.0127, 0.0173} + -- }, + -- ['1969-7-20T20:11:37'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1599, -0.0044, 0.0186} + -- }, + -- ['1969-7-20T20:11:39'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1545, 0.0012, 0.0167} + -- }, + -- ['1969-7-20T20:11:39'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1461, 0.0075, 0.0169} + -- }, + -- ['1969-7-20T20:11:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1470, 0.0012, 0.0155} + -- }, + -- ['1969-7-20T20:11:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1442, -0.0086, 0.0148} + -- }, + -- ['1969-7-20T20:11:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1411, -0.0236, 0.0142} + -- }, + -- ['1969-7-20T20:11:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1302, -0.0240, 0.0131} + -- }, + -- ['1969-7-20T20:11:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1098, -0.0115, 0.0140} + -- }, + -- ['1969-7-20T20:11:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1043, -0.0088, 0.0134} + -- }, + -- ['1969-7-20T20:11:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0979, -0.0025, 0.0144} + -- }, + -- ['1969-7-20T20:11:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1092, -0.0125, 0.0144} + -- }, + -- ['1969-7-20T20:11:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1175, -0.0205, 0.0146} + -- }, + -- ['1969-7-20T20:11:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1230, -0.0249, 0.0157} + -- }, + -- ['1969-7-20T20:11:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1099, -0.0119, 0.0161} + -- }, + -- ['1969-7-20T20:11:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.1056, -0.0071, 0.0167} + -- }, + -- ['1969-7-20T20:11:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0916, 0.0044, 0.0131} + -- }, + -- ['1969-7-20T20:11:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0901, 0.0073, 0.0111} + -- }, + -- ['1969-7-20T20:11:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0839, 0.0040, 0.0075} + -- }, + -- ['1969-7-20T20:11:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0832, 0.0015, 0.0050} + -- }, + -- ['1969-7-20T20:11:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0831, -0.0109, 0.0003} + -- }, + -- ['1969-7-20T20:11:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0812, -0.0147, -0.0009} + -- }, + -- ['1969-7-20T20:11:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0814, -0.0278, -0.0031} + -- }, + -- ['1969-7-20T20:11:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0696, -0.0224, -0.0050} + -- }, + -- ['1969-7-20T20:12:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0617, -0.0242, -0.0067} + -- }, + -- ['1969-7-20T20:12:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0508, -0.0174, -0.0075} + -- }, + -- ['1969-7-20T20:12:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0523, -0.0174, -0.0094} + -- }, + -- ['1969-7-20T20:12:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0466, -0.0117, -0.0094} + -- }, + -- ['1969-7-20T20:12:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0565, -0.0107, -0.0109} + -- }, + -- ['1969-7-20T20:12:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0559, -0.0080, -0.0109} + -- }, + -- ['1969-7-20T20:12:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0686, -0.0065, -0.0113} + -- }, + -- ['1969-7-20T20:12:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0692, -0.0082, -0.0115} + -- }, + -- ['1969-7-20T20:12:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0722, -0.0075, -0.0107} + -- }, + -- ['1969-7-20T20:12:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0707, -0.0144, -0.0113} + -- }, + -- ['1969-7-20T20:12:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0630, -0.0153, -0.0103} + -- }, + -- ['1969-7-20T20:12:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0605, -0.0261, -0.0102} + -- }, + -- ['1969-7-20T20:12:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0441, -0.0305, -0.0096} + -- }, + -- ['1969-7-20T20:12:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0427, -0.0410, -0.0086} + -- }, + -- ['1969-7-20T20:12:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0283, -0.0228, -0.0075} + -- }, + -- ['1969-7-20T20:12:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0329, -0.0178, -0.0050} + -- }, + -- ['1969-7-20T20:12:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0260, -0.0009, -0.0027} + -- }, + -- ['1969-7-20T20:12:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0404, -0.0059, -0.0004} + -- }, + -- ['1969-7-20T20:12:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0467, -0.0140, 0.0023} + -- }, + -- ['1969-7-20T20:12:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0584, -0.0220, 0.0044} + -- }, + -- ['1969-7-20T20:12:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0416, -0.0176, 0.0088} + -- }, + -- ['1969-7-20T20:12:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0370, -0.0102, 0.0104} + -- }, + -- ['1969-7-20T20:12:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0222, -0.0063, 0.0121} + -- }, + -- ['1969-7-20T20:12:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0193, 0.0006, 0.0108} + -- }, + -- ['1969-7-20T20:12:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0166, -0.0059, 0.0098} + -- }, + -- ['1969-7-20T20:12:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0164, -0.0038, 0.0092} + -- }, + -- ['1969-7-20T20:12:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0237, -0.0188, 0.0081} + -- }, + -- ['1969-7-20T20:12:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0249, -0.0199, 0.0081} + -- }, + -- ['1969-7-20T20:12:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0329, -0.0330, 0.0077} + -- }, + -- ['1969-7-20T20:12:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0209, -0.0255, 0.0079} + -- }, + -- ['1969-7-20T20:12:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0157, -0.0205, 0.0084} + -- }, + -- ['1969-7-20T20:12:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0034, -0.0159, 0.0092} + -- }, + -- ['1969-7-20T20:12:33'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0044, -0.0136, 0.0106} + -- }, + -- ['1969-7-20T20:12:33'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9963, -0.0161, 0.0096} + -- }, + -- ['1969-7-20T20:12:35'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0036, -0.0180, 0.0084} + -- }, + -- ['1969-7-20T20:12:35'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9998, -0.0253, 0.0073} + -- }, + -- ['1969-7-20T20:12:37'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0088, -0.0265, 0.0065} + -- }, + -- ['1969-7-20T20:12:37'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0105, -0.0339, 0.0065} + -- }, + -- ['1969-7-20T20:12:39'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0230, -0.0280, 0.0060} + -- }, + -- ['1969-7-20T20:12:39'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0253, -0.0282, 0.0067} + -- }, + -- ['1969-7-20T20:12:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0216, -0.0071, 0.0067} + -- }, + -- ['1969-7-20T20:12:42'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0118, -0.0115, 0.0079} + -- }, + -- ['1969-7-20T20:12:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9946, -0.0098, 0.0077} + -- }, + -- ['1969-7-20T20:12:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9927, -0.0172, 0.0081} + -- }, + -- ['1969-7-20T20:12:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9890, -0.0147, 0.0094} + -- }, + -- ['1969-7-20T20:12:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0046, -0.0125, 0.0094} + -- }, + -- ['1969-7-20T20:12:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0109, -0.0048, 0.0104} + -- }, + -- ['1969-7-20T20:12:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0186, -0.0057, 0.0083} + -- }, + -- ['1969-7-20T20:12:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9940, -0.0226, 0.0048} + -- }, + -- ['1969-7-20T20:12:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9861, -0.0278, 0.0023} + -- }, + -- ['1969-7-20T20:12:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9712, -0.0301, 0.0000} + -- }, + -- ['1969-7-20T20:12:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9768, -0.0176, -0.0013} + -- }, + -- ['1969-7-20T20:12:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9791, -0.0088, -0.0025} + -- }, + -- ['1969-7-20T20:12:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9890, -0.0017, -0.0036} + -- }, + -- ['1969-7-20T20:12:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9906, -0.0245, -0.0056} + -- }, + -- ['1969-7-20T20:12:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9892, -0.0303, -0.0067} + -- }, + -- ['1969-7-20T20:12:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9852, -0.0470, -0.0086} + -- }, + -- ['1969-7-20T20:12:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9837, -0.0307, -0.0088} + -- }, + -- ['1969-7-20T20:12:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9873, -0.0128, -0.0090} + -- }, + -- ['1969-7-20T20:12:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9861, 0.0010, -0.0088} + -- }, + -- ['1969-7-20T20:13:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9944, -0.0117, -0.0094} + -- }, + -- ['1969-7-20T20:13:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9900, -0.0194, -0.0100} + -- }, + -- ['1969-7-20T20:13:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9917, -0.0355, -0.0103} + -- }, + -- ['1969-7-20T20:13:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9856, -0.0395, -0.0105} + -- }, + -- ['1969-7-20T20:13:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9969, -0.0299, -0.0096} + -- }, + -- ['1969-7-20T20:13:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9965, -0.0228, -0.0088} + -- }, + -- ['1969-7-20T20:13:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-1.0015, -0.0073, -0.0075} + -- }, + -- ['1969-7-20T20:13:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9908, -0.0098, -0.0067} + -- }, + -- ['1969-7-20T20:13:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9814, -0.0034, -0.0057} + -- }, + -- ['1969-7-20T20:13:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9729, -0.0071, -0.0044} + -- }, + -- ['1969-7-20T20:13:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9716, -0.0002, -0.0029} + -- }, + -- ['1969-7-20T20:13:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9729, -0.0044, -0.0013} + -- }, + -- ['1969-7-20T20:13:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9793, 0.0010, 0.0006} + -- }, + -- ['1969-7-20T20:13:14'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9869, -0.0040, 0.0031} + -- }, + -- ['1969-7-20T20:13:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9938, -0.0031, 0.0048} + -- }, + -- ['1969-7-20T20:13:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9978, -0.0134, 0.0067} + -- }, + -- ['1969-7-20T20:13:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9881, -0.0334, 0.0048} + -- }, + -- ['1969-7-20T20:13:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9881, -0.0449, 0.0023} + -- }, + -- ['1969-7-20T20:13:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9756, -0.0447, -0.0015} + -- }, + -- ['1969-7-20T20:13:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9804, -0.0351, -0.0034} + -- }, + -- ['1969-7-20T20:13:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9769, -0.0269, -0.0052} + -- }, + -- ['1969-7-20T20:13:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9816, -0.0182, -0.0073} + -- }, + -- ['1969-7-20T20:13:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9783, -0.0192, -0.0084} + -- }, + -- ['1969-7-20T20:13:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9808, -0.0149, -0.0103} + -- }, + -- ['1969-7-20T20:13:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9771, -0.0197, -0.0117} + -- }, + -- ['1969-7-20T20:13:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9748, -0.0171, -0.0127} + -- }, + -- ['1969-7-20T20:13:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9710, -0.0197, -0.0144} + -- }, + -- ['1969-7-20T20:13:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9643, -0.0186, -0.0146} + -- }, + -- ['1969-7-20T20:13:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9616, -0.0165, -0.0159} + -- }, + -- ['1969-7-20T20:13:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9534, -0.0163, -0.0159} + -- }, + -- ['1969-7-20T20:13:31'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.9605, -0.0096, -0.0165} + -- }, + -- ['1969-7-20T20:13:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.8092, -0.0297, -0.0155} + -- }, + -- ['1969-7-20T20:13:41'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.8097, -0.0389, -0.0149} + -- }, + -- ['1969-7-20T20:13:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7923, -0.0358, -0.0138} + -- }, + -- ['1969-7-20T20:13:43'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7988, -0.0267, -0.0125} + -- }, + -- ['1969-7-20T20:13:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7909, -0.0128, -0.0094} + -- }, + -- ['1969-7-20T20:13:45'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7967, -0.0061, -0.0080} + -- }, + -- ['1969-7-20T20:13:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7748, -0.0207, -0.0056} + -- }, + -- ['1969-7-20T20:13:47'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7681, -0.0278, -0.0048} + -- }, + -- ['1969-7-20T20:13:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7574, -0.0426, -0.0027} + -- }, + -- ['1969-7-20T20:13:49'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7582, -0.0364, -0.0004} + -- }, + -- ['1969-7-20T20:13:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7699, -0.0324, 0.0036} + -- }, + -- ['1969-7-20T20:13:51'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7676, -0.0245, 0.0040} + -- }, + -- ['1969-7-20T20:13:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7733, -0.0194, 0.0023} + -- }, + -- ['1969-7-20T20:13:53'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7574, -0.0207, 0.0008} + -- }, + -- ['1969-7-20T20:13:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7440, -0.0310, -0.0017} + -- }, + -- ['1969-7-20T20:13:55'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7405, -0.0569, -0.0044} + -- }, + -- ['1969-7-20T20:13:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7549, -0.0587, -0.0054} + -- }, + -- ['1969-7-20T20:13:57'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7518, -0.0326, -0.0046} + -- }, + -- ['1969-7-20T20:13:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7465, 0.0040, -0.0050} + -- }, + -- ['1969-7-20T20:13:59'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.7465, 0.0113, -0.0050} + -- }, + -- ['1969-7-20T20:14:1'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6939, 0.0029, -0.0063} + -- }, + -- ['1969-7-20T20:14:2'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6912, 0.0079, -0.0079} + -- }, + -- ['1969-7-20T20:14:3'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6793, 0.0048, -0.0077} + -- }, + -- ['1969-7-20T20:14:4'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6817, 0.0090, -0.0098} + -- }, + -- ['1969-7-20T20:14:5'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6730, 0.0117, -0.0090} + -- }, + -- ['1969-7-20T20:14:6'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6684, 0.0102, -0.0096} + -- }, + -- ['1969-7-20T20:14:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6604, 0.0115, -0.0109} + -- }, + -- ['1969-7-20T20:14:7'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6418, 0.0006, -0.0098} + -- }, + -- ['1969-7-20T20:14:9'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6301, -0.0067, -0.0121} + -- }, + -- ['1969-7-20T20:14:10'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6128, -0.0142, -0.0119} + -- }, + -- ['1969-7-20T20:14:11'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6180, -0.0134, -0.0119} + -- }, + -- ['1969-7-20T20:14:12'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6249, -0.0057, -0.0121} + -- }, + -- ['1969-7-20T20:14:13'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6299, -0.0057, -0.0098} + -- }, + -- ['1969-7-20T20:14:14'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6437, -0.0009, -0.0100} + -- }, + -- ['1969-7-20T20:14:15'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6328, -0.0105, -0.0100} + -- }, + -- ['1969-7-20T20:14:16'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6285, -0.0232, -0.0088} + -- }, + -- ['1969-7-20T20:14:17'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6195, -0.0291, -0.0117} + -- }, + -- ['1969-7-20T20:14:18'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6073, -0.0374, -0.0127} + -- }, + -- ['1969-7-20T20:14:19'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.6027, -0.0362, -0.0132} + -- }, + -- ['1969-7-20T20:14:20'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5892, -0.0314, -0.0147} + -- }, + -- ['1969-7-20T20:14:21'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5829, -0.0096, -0.0157} + -- }, + -- ['1969-7-20T20:14:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5674, 0.0119, -0.0263} + -- }, + -- ['1969-7-20T20:14:23'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5674, 0.0261, -0.0324} + -- }, + -- ['1969-7-20T20:14:25'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5637, 0.0232, -0.0439} + -- }, + -- ['1969-7-20T20:14:26'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5670, 0.0081, -0.0525} + -- }, + -- ['1969-7-20T20:14:27'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5739, 0.0013, -0.0564} + -- }, + -- ['1969-7-20T20:14:28'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5660, -0.0021, -0.0587} + -- }, + -- ['1969-7-20T20:14:29'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5603, -0.0025, -0.0604} + -- }, + -- ['1969-7-20T20:14:30'] = { + -- Type = "StaticRotation", + -- Rotation = {-0.5394, 0.0092, -0.0562} + -- }, + ['1969-7-20T20:10:00'] = { + Type = "StaticRotation", + Rotation = {0, 0, 1.5708} + }, + ['1969-7-20T20:12:10'] = { + Type = "StaticRotation", + Rotation = {0, 0, 1.5708} + }, + ['1969-7-20T20:12:14'] = { + Type = "StaticRotation", + Rotation = {0, 0, 1.5708} + }, + ['1969-7-20T20:14:30'] = { + Type = "StaticRotation", + Rotation = {0, 0, 1.5708} + }, + + ['1969-7-20T20:14:31'] = { + Type = "StaticRotation", + Rotation = {-0.5133, 0.0131, -0.0531} + }, + ['1969-7-20T20:14:32'] = { + Type = "StaticRotation", + Rotation = {-0.5043, 0.0117, -0.0487} + }, + ['1969-7-20T20:14:33'] = { + Type = "StaticRotation", + Rotation = {-0.4893, 0.0090, -0.0447} + }, + ['1969-7-20T20:14:33'] = { + Type = "StaticRotation", + Rotation = {-0.4851, -0.0008, -0.0429} + }, + ['1969-7-20T20:14:35'] = { + Type = "StaticRotation", + Rotation = {-0.4865, -0.0057, -0.0382} + }, + ['1969-7-20T20:14:35'] = { + Type = "StaticRotation", + Rotation = {-0.4788, -0.0073, -0.0345} + }, + ['1969-7-20T20:14:37'] = { + Type = "StaticRotation", + Rotation = {-0.4824, -0.0130, -0.0307} + }, + ['1969-7-20T20:14:37'] = { + Type = "StaticRotation", + Rotation = {-0.4836, -0.0103, -0.0268} + }, + ['1969-7-20T20:14:39'] = { + Type = "StaticRotation", + Rotation = {-0.4792, -0.0121, -0.0203} + }, + ['1969-7-20T20:14:40'] = { + Type = "StaticRotation", + Rotation = {-0.4874, -0.0140, -0.0211} + }, + ['1969-7-20T20:14:41'] = { + Type = "StaticRotation", + Rotation = {-0.5030, 0.0002, -0.0209} + }, + ['1969-7-20T20:14:42'] = { + Type = "StaticRotation", + Rotation = {-0.5361, -0.0040, -0.0209} + }, + ['1969-7-20T20:14:44'] = { + Type = "StaticRotation", + Rotation = {-0.4715, -0.0040, -0.0234} + }, + ['1969-7-20T20:14:45'] = { + Type = "StaticRotation", + Rotation = {-0.4433, -0.0050, -0.0238} + }, + ['1969-7-20T20:14:46'] = { + Type = "StaticRotation", + Rotation = {-0.4280, -0.0019, -0.0268} + }, + ['1969-7-20T20:14:47'] = { + Type = "StaticRotation", + Rotation = {-0.4310, -0.0069, -0.0259} + }, + ['1969-7-20T20:14:48'] = { + Type = "StaticRotation", + Rotation = {-0.4389, -0.0147, -0.0257} + }, + ['1969-7-20T20:14:49'] = { + Type = "StaticRotation", + Rotation = {-0.4519, -0.0178, -0.0287} + }, + ['1969-7-20T20:14:50'] = { + Type = "StaticRotation", + Rotation = {-0.4579, -0.0201, -0.0278} + }, + ['1969-7-20T20:14:51'] = { + Type = "StaticRotation", + Rotation = {-0.4554, -0.0147, -0.0265} + }, + ['1969-7-20T20:14:52'] = { + Type = "StaticRotation", + Rotation = {-0.4468, -0.0084, -0.0284} + }, + ['1969-7-20T20:14:53'] = { + Type = "StaticRotation", + Rotation = {-0.4316, -0.0127, -0.0268} + }, + ['1969-7-20T20:14:53'] = { + Type = "StaticRotation", + Rotation = {-0.4228, -0.0171, -0.0255} + }, + ['1969-7-20T20:14:55'] = { + Type = "StaticRotation", + Rotation = {-0.4046, -0.0174, -0.0274} + }, + ['1969-7-20T20:14:57'] = { + Type = "StaticRotation", + Rotation = {-0.3806, -0.0211, -0.0243} + }, + ['1969-7-20T20:14:57'] = { + Type = "StaticRotation", + Rotation = {-0.3751, -0.0178, -0.0249} + }, + ['1969-7-20T20:14:59'] = { + Type = "StaticRotation", + Rotation = {-0.3670, -0.0153, -0.0230} + }, + ['1969-7-20T20:14:59'] = { + Type = "StaticRotation", + Rotation = {-0.3641, -0.0100, -0.0209} + }, + ['1969-7-20T20:15:1'] = { + Type = "StaticRotation", + Rotation = {-0.3526, -0.0021, -0.0207} + }, + ['1969-7-20T20:15:1'] = { + Type = "StaticRotation", + Rotation = {-0.3457, -0.0038, -0.0195} + }, + ['1969-7-20T20:15:3'] = { + Type = "StaticRotation", + Rotation = {-0.3371, -0.0038, -0.0161} + }, + ['1969-7-20T20:15:3'] = { + Type = "StaticRotation", + Rotation = {-0.3309, -0.0015, -0.0192} + }, + ['1969-7-20T20:15:5'] = { + Type = "StaticRotation", + Rotation = {-0.3263, -0.0096, -0.0232} + }, + ['1969-7-20T20:15:5'] = { + Type = "StaticRotation", + Rotation = {-0.3240, 0.0015, -0.0243} + }, + ['1969-7-20T20:15:7'] = { + Type = "StaticRotation", + Rotation = {-0.3160, 0.0061, -0.0295} + }, + ['1969-7-20T20:15:7'] = { + Type = "StaticRotation", + Rotation = {-0.3135, 0.0035, -0.0318} + }, + ['1969-7-20T20:15:9'] = { + Type = "StaticRotation", + Rotation = {-0.3074, 0.0108, -0.0341} + }, + ['1969-7-20T20:15:9'] = { + Type = "StaticRotation", + Rotation = {-0.3022, 0.0027, -0.0360} + }, + ['1969-7-20T20:15:11'] = { + Type = "StaticRotation", + Rotation = {-0.2995, -0.0061, -0.0406} + }, + ['1969-7-20T20:15:11'] = { + Type = "StaticRotation", + Rotation = {-0.2976, -0.0098, -0.0416} + }, + ['1969-7-20T20:15:13'] = { + Type = "StaticRotation", + Rotation = {-0.2901, -0.0127, -0.0447} + }, + ['1969-7-20T20:15:14'] = { + Type = "StaticRotation", + Rotation = {-0.2886, -0.0169, -0.0470} + }, + ['1969-7-20T20:15:15'] = { + Type = "StaticRotation", + Rotation = {-0.2700, -0.0174, -0.0491} + }, + ['1969-7-20T20:15:15'] = { + Type = "StaticRotation", + Rotation = {-0.2107, -0.0119, -0.0512} + }, + ['1969-7-20T20:15:17'] = { + Type = "StaticRotation", + Rotation = {-0.1630, -0.0123, -0.0560} + }, + ['1969-7-20T20:15:18'] = { + Type = "StaticRotation", + Rotation = {-0.1101, -0.0077, -0.0583} + }, + ['1969-7-20T20:15:19'] = { + Type = "StaticRotation", + Rotation = {-0.0868, -0.0029, -0.0613} + }, + ['1969-7-20T20:15:19'] = { + Type = "StaticRotation", + Rotation = {-0.0893, -0.0036, -0.0642} + }, + ['1969-7-20T20:15:21'] = { + Type = "StaticRotation", + Rotation = {-0.0892, -0.0029, -0.0675} + }, + ['1969-7-20T20:15:21'] = { + Type = "StaticRotation", + Rotation = {-0.0970, -0.0004, -0.0698} + }, + ['1969-7-20T20:15:23'] = { + Type = "StaticRotation", + Rotation = {-0.1020, -0.0079, -0.0736} + }, + ['1969-7-20T20:15:24'] = { + Type = "StaticRotation", + Rotation = {-0.0959, -0.0069, -0.0771} + }, + ['1969-7-20T20:15:25'] = { + Type = "StaticRotation", + Rotation = {-0.0999, -0.0057, -0.0794} + }, + ['1969-7-20T20:15:26'] = { + Type = "StaticRotation", + Rotation = {-0.1001, -0.0075, -0.0828} + }, + ['1969-7-20T20:15:27'] = { + Type = "StaticRotation", + Rotation = {-0.0966, -0.0067, -0.0849} + }, + ['1969-7-20T20:15:28'] = { + Type = "StaticRotation", + Rotation = {-0.1039, -0.0050, -0.0876} + }, + ['1969-7-20T20:15:29'] = { + Type = "StaticRotation", + Rotation = {-0.1055, -0.0059, -0.0893} + }, + ['1969-7-20T20:15:30'] = { + Type = "StaticRotation", + Rotation = {-0.1010, -0.0050, -0.0909} + }, + ['1969-7-20T20:15:31'] = { + Type = "StaticRotation", + Rotation = {-0.1066, -0.0036, -0.0903} + }, + ['1969-7-20T20:15:32'] = { + Type = "StaticRotation", + Rotation = {-0.1106, -0.0032, -0.0882} + }, + ['1969-7-20T20:15:33'] = { + Type = "StaticRotation", + Rotation = {-0.1074, -0.0019, -0.0874} + }, + ['1969-7-20T20:15:34'] = { + Type = "StaticRotation", + Rotation = {-0.1131, 0.0021, -0.0857} + }, + ['1969-7-20T20:15:35'] = { + Type = "StaticRotation", + Rotation = {-0.1193, 0.0036, -0.0842} + }, + ['1969-7-20T20:15:36'] = { + Type = "StaticRotation", + Rotation = {-0.1193, 0.0083, -0.0819} + }, + ['1969-7-20T20:15:37'] = { + Type = "StaticRotation", + Rotation = {-0.1233, 0.0129, -0.0809} + }, + ['1969-7-20T20:15:38'] = { + Type = "StaticRotation", + Rotation = {-0.1365, 0.0194, -0.0786} + }, + ['1969-7-20T20:15:39'] = { + Type = "StaticRotation", + Rotation = {-0.1334, 0.0230, -0.0765} + }, + ['1969-7-20T20:15:40'] = { + Type = "StaticRotation", + Rotation = {-0.1267, 0.0257, -0.0744} + }, + ['1969-7-20T20:15:41'] = { + Type = "StaticRotation", + Rotation = {-0.1271, 0.0288, -0.0732} + }, + ['1969-7-20T20:15:42'] = { + Type = "StaticRotation", + Rotation = {-0.1206, 0.0272, -0.0700} + }, + ['1969-7-20T20:15:43'] = { + Type = "StaticRotation", + Rotation = {-0.1465, 0.0244, -0.0692} + }, + ['1969-7-20T20:15:44'] = { + Type = "StaticRotation", + Rotation = {-0.1931, 0.0217, -0.0692} + }, + ['1969-7-20T20:15:45'] = { + Type = "StaticRotation", + Rotation = {-0.1981, 0.0205, -0.0679} + }, + ['1969-7-20T20:15:46'] = { + Type = "StaticRotation", + Rotation = {-0.2048, 0.0173, -0.0656} + }, + ['1969-7-20T20:15:47'] = { + Type = "StaticRotation", + Rotation = {-0.2151, 0.0169, -0.0650} + }, + ['1969-7-20T20:15:48'] = { + Type = "StaticRotation", + Rotation = {-0.2385, 0.0132, -0.0633} + }, + ['1969-7-20T20:15:49'] = { + Type = "StaticRotation", + Rotation = {-0.2590, 0.0092, -0.0623} + }, + ['1969-7-20T20:15:50'] = { + Type = "StaticRotation", + Rotation = {-0.2607, 0.0077, -0.0608} + }, + ['1969-7-20T20:15:51'] = { + Type = "StaticRotation", + Rotation = {-0.2646, 0.0056, -0.0600} + }, + ['1969-7-20T20:15:52'] = { + Type = "StaticRotation", + Rotation = {-0.2680, 0.0004, -0.0575} + }, + ['1969-7-20T20:15:53'] = { + Type = "StaticRotation", + Rotation = {-0.2682, -0.0011, -0.0560} + }, + ['1969-7-20T20:15:54'] = { + Type = "StaticRotation", + Rotation = {-0.2742, -0.0044, -0.0543} + }, + ['1969-7-20T20:15:55'] = { + Type = "StaticRotation", + Rotation = {-0.2757, -0.0061, -0.0522} + }, + ['1969-7-20T20:15:56'] = { + Type = "StaticRotation", + Rotation = {-0.2727, -0.0065, -0.0491} + }, + ['1969-7-20T20:15:57'] = { + Type = "StaticRotation", + Rotation = {-0.2724, -0.0063, -0.0474} + }, + ['1969-7-20T20:15:58'] = { + Type = "StaticRotation", + Rotation = {-0.2732, -0.0077, -0.0445} + }, + ['1969-7-20T20:15:59'] = { + Type = "StaticRotation", + Rotation = {-0.2709, -0.0092, -0.0420} + }, + ['1969-7-20T20:16:0'] = { + Type = "StaticRotation", + Rotation = {-0.2690, -0.0102, -0.0387} + }, + ['1969-7-20T20:16:1'] = { + Type = "StaticRotation", + Rotation = {-0.2704, -0.0115, -0.0368} + }, + ['1969-7-20T20:16:2'] = { + Type = "StaticRotation", + Rotation = {-0.2704, -0.0142, -0.0332} + }, + ['1969-7-20T20:16:3'] = { + Type = "StaticRotation", + Rotation = {-0.2700, -0.0153, -0.0305} + }, + ['1969-7-20T20:16:4'] = { + Type = "StaticRotation", + Rotation = {-0.2736, -0.0176, -0.0268} + }, + ['1969-7-20T20:16:5'] = { + Type = "StaticRotation", + Rotation = {-0.2752, -0.0199, -0.0243} + }, + ['1969-7-20T20:16:6'] = { + Type = "StaticRotation", + Rotation = {-0.2752, -0.0238, -0.0207} + }, + ['1969-7-20T20:16:7'] = { + Type = "StaticRotation", + Rotation = {-0.2702, -0.0245, -0.0205} + }, + ['1969-7-20T20:16:8'] = { + Type = "StaticRotation", + Rotation = {-0.1841, -0.0217, -0.0219} + }, + ['1969-7-20T20:16:9'] = { + Type = "StaticRotation", + Rotation = {-0.1632, -0.0217, -0.0226} + }, + ['1969-7-20T20:16:26'] = { + Type = "StaticRotation", + Rotation = {-0.0989, -0.0184, -0.0391} + }, + ['1969-7-20T20:16:27'] = { + Type = "StaticRotation", + Rotation = {-0.0968, -0.0167, -0.0393} + }, + ['1969-7-20T20:16:28'] = { + Type = "StaticRotation", + Rotation = {-0.0171, -0.0103, -0.0406} + }, + ['1969-7-20T20:16:29'] = { + Type = "StaticRotation", + Rotation = {-0.0157, -0.0105, -0.0412} + }, + ['1969-7-20T20:16:30'] = { + Type = "StaticRotation", + Rotation = {0.0127, -0.0103, -0.0427} + }, + ['1969-7-20T20:16:31'] = { + Type = "StaticRotation", + Rotation = {0.0134, -0.0147, -0.0433} + }, + ['1969-7-20T20:16:32'] = { + Type = "StaticRotation", + Rotation = {0.0042, -0.0370, -0.0470} + }, + ['1969-7-20T20:16:33'] = { + Type = "StaticRotation", + Rotation = {0.0092, -0.0506, -0.0487} + }, + ['1969-7-20T20:16:34'] = { + Type = "StaticRotation", + Rotation = {0.0244, -0.0512, -0.0510} + }, + ['1969-7-20T20:16:35'] = { + Type = "StaticRotation", + Rotation = {0.0042, -0.0546, -0.0512} + }, + ['1969-7-20T20:16:36'] = { + Type = "StaticRotation", + Rotation = {-0.0006, -0.0558, -0.0533} + }, + ['1969-7-20T20:16:37'] = { + Type = "StaticRotation", + Rotation = {0.0050, -0.0522, -0.0543} + }, + ['1969-7-20T20:16:38'] = { + Type = "StaticRotation", + Rotation = {0.0077, -0.0343, -0.0548} + }, + ['1969-7-20T20:16:39'] = { + Type = "StaticRotation", + Rotation = {-0.0004, -0.0155, -0.0550} + }, + ['1969-7-20T20:16:40'] = { + Type = "StaticRotation", + Rotation = {0.0036, -0.0105, -0.0571} + }, + ['1969-7-20T20:16:41'] = { + Type = "StaticRotation", + Rotation = {-0.0080, -0.0086, -0.0579} + }, + ['1969-7-20T20:16:42'] = { + Type = "StaticRotation", + Rotation = {-0.0698, -0.0140, -0.0604} + }, + ['1969-7-20T20:16:43'] = { + Type = "StaticRotation", + Rotation = {-0.0579, -0.0134, -0.0623} + }, + ['1969-7-20T20:16:44'] = { + Type = "StaticRotation", + Rotation = {-0.0462, -0.0090, -0.0648} + }, + ['1969-7-20T20:16:45'] = { + Type = "StaticRotation", + Rotation = {-0.0466, -0.0067, -0.0665} + }, + ['1969-7-20T20:16:46'] = { + Type = "StaticRotation", + Rotation = {-0.0529, -0.0027, -0.0694} + }, + ['1969-7-20T20:16:47'] = { + Type = "StaticRotation", + Rotation = {-0.0518, 0.0079, -0.0707} + }, + ['1969-7-20T20:16:48'] = { + Type = "StaticRotation", + Rotation = {-0.0602, 0.0299, -0.0729} + }, + ['1969-7-20T20:16:49'] = { + Type = "StaticRotation", + Rotation = {-0.0510, 0.0562, -0.0729} + }, + ['1969-7-20T20:16:50'] = { + Type = "StaticRotation", + Rotation = {-0.0539, 0.0562, -0.0765} + }, + ['1969-7-20T20:16:51'] = { + Type = "StaticRotation", + Rotation = {-0.0928, 0.0545, -0.0813} + }, + ['1969-7-20T20:16:52'] = { + Type = "StaticRotation", + Rotation = {-0.0886, 0.0560, -0.0844} + }, + ['1969-7-20T20:16:53'] = { + Type = "StaticRotation", + Rotation = {-0.0832, 0.0552, -0.0865} + }, + ['1969-7-20T20:16:54'] = { + Type = "StaticRotation", + Rotation = {-0.0805, 0.0573, -0.0899} + }, + ['1969-7-20T20:16:55'] = { + Type = "StaticRotation", + Rotation = {-0.0784, 0.0614, -0.0924} + }, + ['1969-7-20T20:16:56'] = { + Type = "StaticRotation", + Rotation = {-0.0729, 0.0635, -0.0945} + }, + ['1969-7-20T20:16:57'] = { + Type = "StaticRotation", + Rotation = {-0.0792, 0.0627, -0.0976} + }, + ['1969-7-20T20:17:7'] = { + Type = "StaticRotation", + Rotation = {-0.1056, -0.0366, -0.1402} + }, + ['1969-7-20T20:17:7'] = { + Type = "StaticRotation", + Rotation = {-0.1053, -0.0395, -0.1428} + }, + ['1969-7-20T20:17:9'] = { + Type = "StaticRotation", + Rotation = {-0.0725, -0.0314, -0.1503} + }, + ['1969-7-20T20:17:9'] = { + Type = "StaticRotation", + Rotation = {-0.0259, -0.0270, -0.1542} + }, + ['1969-7-20T20:17:11'] = { + Type = "StaticRotation", + Rotation = {0.0874, -0.0059, -0.1614} + }, + ['1969-7-20T20:17:12'] = { + Type = "StaticRotation", + Rotation = {0.0769, -0.0096, -0.1678} + }, + ['1969-7-20T20:17:13'] = { + Type = "StaticRotation", + Rotation = {0.0740, -0.0270, -0.1743} + }, + ['1969-7-20T20:17:14'] = { + Type = "StaticRotation", + Rotation = {0.0673, -0.0458, -0.1810} + }, + ['1969-7-20T20:17:15'] = { + Type = "StaticRotation", + Rotation = {0.0550, -0.0506, -0.1860} + }, + ['1969-7-20T20:17:16'] = { + Type = "StaticRotation", + Rotation = {0.0449, -0.0577, -0.1931} + }, + ['1969-7-20T20:17:17'] = { + Type = "StaticRotation", + Rotation = {0.0437, -0.0617, -0.1967} + }, + ['1969-7-20T20:17:18'] = { + Type = "StaticRotation", + Rotation = {0.0297, -0.0650, -0.2027} + }, + ['1969-7-20T20:17:19'] = { + Type = "StaticRotation", + Rotation = {0.0203, -0.0518, -0.2061} + }, + ['1969-7-20T20:17:20'] = { + Type = "StaticRotation", + Rotation = {0.0211, -0.0201, -0.2109} + }, + ['1969-7-20T20:17:21'] = { + Type = "StaticRotation", + Rotation = {0.0228, -0.0197, -0.2159} + }, + ['1969-7-20T20:17:22'] = { + Type = "StaticRotation", + Rotation = {-0.0201, -0.0257, -0.2230} + }, + ['1969-7-20T20:17:23'] = { + Type = "StaticRotation", + Rotation = {-0.0299, -0.0125, -0.2287} + }, + ['1969-7-20T20:17:24'] = { + Type = "StaticRotation", + Rotation = {-0.0368, -0.0025, -0.2355} + }, + ['1969-7-20T20:17:25'] = { + Type = "StaticRotation", + Rotation = {-0.0464, 0.0209, -0.2408} + }, + ['1969-7-20T20:17:26'] = { + Type = "StaticRotation", + Rotation = {-0.0548, 0.0474, -0.2472} + }, + ['1969-7-20T20:17:27'] = { + Type = "StaticRotation", + Rotation = {-0.0535, 0.0464, -0.2481} + }, + ['1969-7-20T20:17:28'] = { + Type = "StaticRotation", + Rotation = {-0.0512, 0.0508, -0.2491} + }, + ['1969-7-20T20:17:29'] = { + Type = "StaticRotation", + Rotation = {-0.0625, 0.0781, -0.2504} + }, + ['1969-7-20T20:17:30'] = { + Type = "StaticRotation", + Rotation = {-0.0811, 0.0711, -0.2531} + }, + ['1969-7-20T20:17:31'] = { + Type = "StaticRotation", + Rotation = {-0.0855, 0.0692, -0.2544} + }, + ['1969-7-20T20:17:32'] = { + Type = "StaticRotation", + Rotation = {-0.0940, 0.0673, -0.2569} + }, + ['1969-7-20T20:17:33'] = { + Type = "StaticRotation", + Rotation = {-0.0963, 0.0648, -0.2587} + }, + ['1969-7-20T20:17:34'] = { + Type = "StaticRotation", + Rotation = {-0.0909, 0.0619, -0.2587} + }, + ['1969-7-20T20:17:35'] = { + Type = "StaticRotation", + Rotation = {-0.0832, 0.0602, -0.2585} + }, + ['1969-7-20T20:17:36'] = { + Type = "StaticRotation", + Rotation = {-0.0761, 0.0326, -0.2602} + }, + ['1969-7-20T20:17:37'] = { + Type = "StaticRotation", + Rotation = {-0.0612, 0.0013, -0.2635} + }, + ['1969-7-20T20:17:38'] = { + Type = "StaticRotation", + Rotation = {-0.0274, -0.0079, -0.2727} + }, + ['1969-7-20T20:17:39'] = { + Type = "StaticRotation", + Rotation = {-0.0061, -0.0470, -0.2732} + }, + ['1969-7-20T20:17:40'] = { + Type = "StaticRotation", + Rotation = {-0.0794, -0.0088, -0.2447} + }, +}) diff --git a/data/assets/scene/solarsystem/missions/apollo/apollo8launchtrail.asset b/data/assets/scene/solarsystem/missions/apollo/apollo8launchtrail.asset new file mode 100644 index 0000000000..701051ff6e --- /dev/null +++ b/data/assets/scene/solarsystem/missions/apollo/apollo8launchtrail.asset @@ -0,0 +1,74 @@ +local assetHelper = asset.require('util/asset_helper') +local sunTransforms = asset.require('scene/solarsystem/sun/transforms') +local kernelsFolder = asset.syncedResource({ + Name = "Apollo Kernels", + Type = "HttpSynchronization", + Identifier = "apollo_spice", + Version = 1 +}) + +local kernels = { + kernelsFolder .. "/moon_080317.tf", + kernelsFolder .. "/apollo8.tf", + kernelsFolder .. "/moon_pa_de421_1900-2050.bpc", + kernelsFolder .. '/apollo8.tsc', + kernelsFolder .. '/apollo8.bsp', + kernelsFolder .. '/apollo8_earthrise.bc', +} + +local apolloSpiceId = "-908" + + +local Apollo8LaunchTrail = { + Identifier = "Apollo8LaunchTrail", + Parent = "Earth", + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = apolloSpiceId, + Observer = "EARTH", + Frame = "IAU_EARTH", + Kernels = kernels + }, + Color = { 0.70, 0.50, 0.20 }, + StartTime = "1968 DEC 21 12:51:00", + EndTime = "1968 DEC 21 23:23:22", + SampleInterval = 30 + }, + GUI = { + Name = "Apollo 8 Launch Trail", + Path = "/Solar System/Missions/Apollo" + } +} + +local Apollo8EarthBarycenterTrail = { + Identifier = "Apollo8EarthBarycenterTrail", + Parent = "EarthBarycenter", + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = apolloSpiceId, + Observer = "EARTH BARYCENTER", + Frame = "GALACTIC", + Kernels = kernels + }, + Color = { 1, 0.0, 0.0 }, + StartTime = "1968 DEC 21", + EndTime = "1968 DEC 28", + SampleInterval = 30, + Enabled = false, + }, + GUI = { + Name = "Apollo 8 Earth Barycenter Trail", + Path = "/Solar System/Missions/Apollo" + } +} + +local exportList = { + Apollo8LaunchTrail, + Apollo8EarthBarycenterTrail, +} + +assetHelper.registerSceneGraphNodesAndExport(asset, exportList) diff --git a/data/assets/scene/solarsystem/missions/apollo/bouldersstation2.asset b/data/assets/scene/solarsystem/missions/apollo/bouldersstation2.asset index 5723c970bc..2d096b99d0 100644 --- a/data/assets/scene/solarsystem/missions/apollo/bouldersstation2.asset +++ b/data/assets/scene/solarsystem/missions/apollo/bouldersstation2.asset @@ -33,8 +33,8 @@ local Station2Boulder1Holder = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.5294692, Latitude = 20.098824, - FixedAltitude = -2442.8, - UseFixedAltitude = true + Altitude = -2442.8, + UseHeightMap = false } }, GUI = { @@ -78,8 +78,8 @@ local Station2Boulder2Holder = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.5287892, Latitude = 20.098240, - FixedAltitude = -2434.6, - UseFixedAltitude = true + Altitude = -2434.6, + UseHeightMap = false } }, GUI = { @@ -123,8 +123,8 @@ local Station2Boulder3Holder = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.5294692, Latitude = 20.098610, - FixedAltitude = -2441.55, - UseFixedAltitude = true + Altitude = -2441.55, + UseHeightMap = false } }, GUI = { diff --git a/data/assets/scene/solarsystem/missions/apollo/bouldersstation6.asset b/data/assets/scene/solarsystem/missions/apollo/bouldersstation6.asset index dba9844a7c..919de3f9a8 100644 --- a/data/assets/scene/solarsystem/missions/apollo/bouldersstation6.asset +++ b/data/assets/scene/solarsystem/missions/apollo/bouldersstation6.asset @@ -37,6 +37,8 @@ local Station6Frag1Holder = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.80068, Latitude = 20.2903, + Altitude = -2562.6, + UseHeightmap = false } }, GUI = { @@ -54,6 +56,8 @@ local Station6Frag1Model = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.8007, Latitude = 20.2903, + Altitude = -2562.6, + UseHeightmap = false } }, Transform = { @@ -104,8 +108,8 @@ local Station6Frag2Model = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.80055, Latitude = 20.289808, - FixedAltitude = -2566.5, - UseFixedAltitude = true + Altitude = -2566.5, + UseHeightmap = false } }, Renderable = { @@ -140,8 +144,8 @@ local Station6Frag3Model = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.80053, Latitude = 20.29030, - FixedAltitude = -2563.0, - UseFixedAltitude = true + Altitude = -2563.0, + UseHeightMap = false } }, Renderable = { diff --git a/data/assets/scene/solarsystem/missions/apollo/bouldersstation7.asset b/data/assets/scene/solarsystem/missions/apollo/bouldersstation7.asset index 555d4fcb82..d2eab52355 100644 --- a/data/assets/scene/solarsystem/missions/apollo/bouldersstation7.asset +++ b/data/assets/scene/solarsystem/missions/apollo/bouldersstation7.asset @@ -34,8 +34,8 @@ local Station7BoulderHolder = { Globe = moonAsset.Moon.Identifier, Longitude = -360+30.8165882, Latitude = 20.2908556, - FixedAltitude = -2593.5, - UseFixedAltitude = true + Altitude = -2593.5, + UseHeightMap = true } }, GUI = { diff --git a/include/openspace/util/timeline.h b/include/openspace/util/timeline.h index b47d9cf4e3..81f2a9687b 100644 --- a/include/openspace/util/timeline.h +++ b/include/openspace/util/timeline.h @@ -44,7 +44,12 @@ struct KeyframeBase { */ template struct Keyframe : public KeyframeBase { - Keyframe(size_t i, double t, T p); + Keyframe(size_t i, double t, T d); + + Keyframe(Keyframe const&) = default; + Keyframe(Keyframe&&) = default; + Keyframe& operator=(Keyframe&&) = default; + Keyframe& operator=(Keyframe const&) = default; T data; }; @@ -56,7 +61,8 @@ class Timeline { public: virtual ~Timeline() = default; - void addKeyframe(double time, T data); + void addKeyframe(double time, const T& data); + void addKeyframe(double time, T&& data); void clearKeyframes(); void removeKeyframe(size_t id); void removeKeyframesBefore(double timestamp, bool inclusive = false); @@ -66,6 +72,7 @@ public: size_t nKeyframes() const; const Keyframe* firstKeyframeAfter(double timestamp, bool inclusive = false) const; const Keyframe* lastKeyframeBefore(double timestamp, bool inclusive = false) const; + const std::deque>& keyframes() const; private: diff --git a/include/openspace/util/timeline.inl b/include/openspace/util/timeline.inl index 79ccf4c51a..d2811a6aee 100644 --- a/include/openspace/util/timeline.inl +++ b/include/openspace/util/timeline.inl @@ -25,13 +25,25 @@ namespace openspace { template -Keyframe::Keyframe(size_t i, double t, T p) +Keyframe::Keyframe(size_t i, double t, T d) : KeyframeBase{ i, t } - , data(p) + , data(std::move(d)) {} template -void Timeline::addKeyframe(double timestamp, T data) { +void Timeline::addKeyframe(double timestamp, T&& data) { + Keyframe keyframe(++_nextKeyframeId, timestamp, std::move(data)); + const auto iter = std::upper_bound( + _keyframes.cbegin(), + _keyframes.cend(), + keyframe, + &compareKeyframeTimes + ); + _keyframes.insert(iter, std::move(keyframe)); +} + +template +void Timeline::addKeyframe(double timestamp, const T& data) { Keyframe keyframe(++_nextKeyframeId, timestamp, data); const auto iter = std::upper_bound( _keyframes.cbegin(), @@ -39,7 +51,7 @@ void Timeline::addKeyframe(double timestamp, T data) { keyframe, &compareKeyframeTimes ); - _keyframes.insert(iter, keyframe); + _keyframes.insert(iter, std::move(keyframe)); } template @@ -143,7 +155,7 @@ void Timeline::removeKeyframe(size_t id) { std::remove_if( _keyframes.begin(), _keyframes.end(), - [id] (Keyframe keyframe) { return keyframe.id == id; } + [id] (const Keyframe& keyframe) { return keyframe.id == id; } ), _keyframes.end() ); @@ -209,7 +221,7 @@ const Keyframe* Timeline::lastKeyframeBefore(double timestamp, bool inclus return &(*it); } -template +template const std::deque>& Timeline::keyframes() const { return _keyframes; } diff --git a/modules/base/CMakeLists.txt b/modules/base/CMakeLists.txt index de4b747968..2ce1e6846c 100644 --- a/modules/base/CMakeLists.txt +++ b/modules/base/CMakeLists.txt @@ -54,8 +54,7 @@ set(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceframebuffer.h ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimagelocal.h ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimageonline.h - ${CMAKE_CURRENT_SOURCE_DIR}/translation/luatranslation.h - ${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.h + ${CMAKE_CURRENT_SOURCE_DIR}/rotation/timelinerotation.h ${CMAKE_CURRENT_SOURCE_DIR}/rotation/constantrotation.h ${CMAKE_CURRENT_SOURCE_DIR}/rotation/fixedrotation.h ${CMAKE_CURRENT_SOURCE_DIR}/rotation/luarotation.h @@ -65,6 +64,10 @@ set(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/scale/timedependentscale.h ${CMAKE_CURRENT_SOURCE_DIR}/timeframe/timeframeinterval.h ${CMAKE_CURRENT_SOURCE_DIR}/timeframe/timeframeunion.h + ${CMAKE_CURRENT_SOURCE_DIR}/translation/luatranslation.h + ${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.h + ${CMAKE_CURRENT_SOURCE_DIR}/translation/timelinetranslation.h + ) source_group("Header Files" FILES ${HEADER_FILES}) @@ -98,8 +101,7 @@ set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceframebuffer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimagelocal.cpp ${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimageonline.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/translation/luatranslation.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/rotation/timelinerotation.cpp ${CMAKE_CURRENT_SOURCE_DIR}/rotation/constantrotation.cpp ${CMAKE_CURRENT_SOURCE_DIR}/rotation/fixedrotation.cpp ${CMAKE_CURRENT_SOURCE_DIR}/rotation/luarotation.cpp @@ -109,6 +111,9 @@ set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/scale/timedependentscale.cpp ${CMAKE_CURRENT_SOURCE_DIR}/timeframe/timeframeinterval.cpp ${CMAKE_CURRENT_SOURCE_DIR}/timeframe/timeframeunion.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/translation/luatranslation.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/translation/timelinetranslation.cpp ) source_group("Source Files" FILES ${SOURCE_FILES}) diff --git a/modules/base/basemodule.cpp b/modules/base/basemodule.cpp index ead6089797..ba70bd6c2e 100644 --- a/modules/base/basemodule.cpp +++ b/modules/base/basemodule.cpp @@ -55,9 +55,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -131,6 +133,7 @@ void BaseModule::internalInitialize(const ghoul::Dictionary&) { auto fTranslation = FactoryManager::ref().factory(); ghoul_assert(fTranslation, "Ephemeris factory was not created"); + fTranslation->registerClass("TimelineTranslation"); fTranslation->registerClass("LuaTranslation"); fTranslation->registerClass("StaticTranslation"); @@ -141,6 +144,8 @@ void BaseModule::internalInitialize(const ghoul::Dictionary&) { fRotation->registerClass("FixedRotation"); fRotation->registerClass("LuaRotation"); fRotation->registerClass("StaticRotation"); + fRotation->registerClass("TimelineRotation"); + auto fScale = FactoryManager::ref().factory(); ghoul_assert(fScale, "Scale factory was not created"); @@ -198,6 +203,7 @@ std::vector BaseModule::documentations() const { FixedRotation::Documentation(), LuaRotation::Documentation(), StaticRotation::Documentation(), + TimelineRotation::Documentation(), LuaScale::Documentation(), StaticScale::Documentation(), @@ -205,6 +211,7 @@ std::vector BaseModule::documentations() const { LuaTranslation::Documentation(), StaticTranslation::Documentation(), + TimelineTranslation::Documentation(), TimeFrameInterval::Documentation(), TimeFrameUnion::Documentation(), diff --git a/modules/base/rotation/timelinerotation.cpp b/modules/base/rotation/timelinerotation.cpp new file mode 100644 index 0000000000..5fbc741833 --- /dev/null +++ b/modules/base/rotation/timelinerotation.cpp @@ -0,0 +1,118 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include + +namespace { + constexpr const char* KeyType = "Type"; + constexpr const char* KeyKeyframes = "Keyframes"; +} // namespace + +namespace openspace { + +documentation::Documentation TimelineRotation::Documentation() { + using namespace documentation; + return { + "Timeline Rotation", + "base_transform_rotation_keyframe", + { + { + KeyType, + new StringEqualVerifier("TimelineRotation"), + Optional::No + }, + { + KeyKeyframes, + new TableVerifier({ + { "*", new TableVerifier(), Optional::No, "Any translation object" } + }), + Optional::No, + "A table of keyframes, with keys formatted as YYYY-MM-DDTHH:MM:SS" + "and values that are valid Rotation objects." + } + } + }; +} + +TimelineRotation::TimelineRotation(const ghoul::Dictionary& dictionary) { + documentation::testSpecificationAndThrow( + Documentation(), + dictionary, + "TimelineTranslation" + ); + + const ghoul::Dictionary& keyframes = + dictionary.value(KeyKeyframes); + + std::vector timeStrings = keyframes.keys(); + for (const std::string& timeString : timeStrings) { + const double t = Time::convertTime(timeString); + + std::unique_ptr rotation = + Rotation::createFromDictionary( + keyframes.value(timeString) + ); + + if (rotation) { + _timeline.addKeyframe(t, std::move(rotation)); + } + } +} + +glm::dmat3 TimelineRotation::matrix(const UpdateData& data) const { + const double now = data.time.j2000Seconds(); + using KeyframePointer = const Keyframe>*; + + KeyframePointer prev = _timeline.lastKeyframeBefore(now, true); + KeyframePointer next = _timeline.firstKeyframeAfter(now, true); + + if (!prev && !next) { + return glm::dmat3(0.0); + } + if (!prev) { + prev = next; + } + if (!next) { + next = prev; + } + const double prevTime = prev->timestamp; + const double nextTime = next->timestamp; + + double t = 0.0; + if (nextTime - prevTime > 0.0) { + t = (now - prevTime) / (nextTime - prevTime); + } + + const glm::dquat nextRot = glm::quat_cast(next->data->matrix(data)); + const glm::dquat prevRot = glm::quat_cast(prev->data->matrix(data)); + + return glm::dmat3(glm::slerp(prevRot, nextRot, t)); +} + +} // namespace openspace diff --git a/modules/base/rotation/timelinerotation.h b/modules/base/rotation/timelinerotation.h new file mode 100644 index 0000000000..a969341a89 --- /dev/null +++ b/modules/base/rotation/timelinerotation.h @@ -0,0 +1,49 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_BASE___TIMELINEROTATION___H__ +#define __OPENSPACE_MODULE_BASE___TIMELINEROTATION___H__ + +#include +#include + +namespace openspace { + +struct UpdateData; + +namespace documentation { struct Documentation; } + +class TimelineRotation : public Rotation { +public: + TimelineRotation(const ghoul::Dictionary& dictionary); + glm::dmat3 matrix(const UpdateData& data) const override; + static documentation::Documentation Documentation(); + +private: + Timeline> _timeline; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_BASE___TIMELINEROTATION___H__ diff --git a/modules/base/translation/timelinetranslation.cpp b/modules/base/translation/timelinetranslation.cpp new file mode 100644 index 0000000000..9796255d65 --- /dev/null +++ b/modules/base/translation/timelinetranslation.cpp @@ -0,0 +1,114 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include + +namespace { + constexpr const char* KeyType = "Type"; + constexpr const char* KeyKeyframes = "Keyframes"; +} // namespace + +namespace openspace { + +documentation::Documentation TimelineTranslation::Documentation() { + using namespace documentation; + return { + "Timeline Translation", + "base_transform_translation_keyframe", + { + { + KeyType, + new StringEqualVerifier("TimelineTranslation"), + Optional::No + }, + { + KeyKeyframes, + new TableVerifier({ + { "*", new TableVerifier(), Optional::No, "Any translation object" } + }), + Optional::No, + "A table of keyframes, with keys formatted as YYYY-MM-DDTHH:MM:SS" + "and values that are valid Translation objects." + } + } + }; +} + +TimelineTranslation::TimelineTranslation(const ghoul::Dictionary& dictionary) { + documentation::testSpecificationAndThrow( + Documentation(), + dictionary, + "TimelineTranslation" + ); + + const ghoul::Dictionary& keyframes = + dictionary.value(KeyKeyframes); + + std::vector timeStrings = keyframes.keys(); + for (const std::string& timeString : timeStrings) { + const double t = Time::convertTime(timeString); + + std::unique_ptr translation = + Translation::createFromDictionary( + keyframes.value(timeString) + ); + + if (translation) { + _timeline.addKeyframe(t, std::move(translation)); + } + } +} + +glm::dvec3 TimelineTranslation::position(const UpdateData& data) const { + const double now = data.time.j2000Seconds(); + using KeyframePointer = const Keyframe>*; + + KeyframePointer prev = _timeline.lastKeyframeBefore(now, true); + KeyframePointer next = _timeline.firstKeyframeAfter(now, true); + + if (!prev && !next) { + return glm::dvec3(0.0); + } + if (!prev) { + prev = next; + } + if (!next) { + next = prev; + } + const double prevTime = prev->timestamp; + const double nextTime = next->timestamp; + + double t = 0.0; + if (nextTime - prevTime > 0.0) { + t = (now - prevTime) / (nextTime - prevTime); + } + return t * next->data->position(data) + (1.0 - t) * prev->data->position(data); +} + +} // namespace openspace diff --git a/modules/base/translation/timelinetranslation.h b/modules/base/translation/timelinetranslation.h new file mode 100644 index 0000000000..0d528d36a6 --- /dev/null +++ b/modules/base/translation/timelinetranslation.h @@ -0,0 +1,50 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_BASE___TIMELINETRANSLATION___H__ +#define __OPENSPACE_MODULE_BASE___TIMELINETRANSLATION___H__ + +#include +#include + +namespace openspace { + +struct UpdateData; + +namespace documentation { struct Documentation; } + +class TimelineTranslation : public Translation { +public: + TimelineTranslation(const ghoul::Dictionary& dictionary); + + glm::dvec3 position(const UpdateData& data) const override; + static documentation::Documentation Documentation(); + +private: + Timeline> _timeline; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_BASE___TIMELINETRANSLATION___H__ diff --git a/modules/globebrowsing/src/dashboarditemglobelocation.cpp b/modules/globebrowsing/src/dashboarditemglobelocation.cpp index 86ab30d9e0..3b6dcbf462 100644 --- a/modules/globebrowsing/src/dashboarditemglobelocation.cpp +++ b/modules/globebrowsing/src/dashboarditemglobelocation.cpp @@ -173,9 +173,16 @@ void DashboardItemGlobeLocation::render(glm::vec2& penPosition) { bool isEast = lon > 0.0; lon = std::abs(lon); - const double altitude = glm::length( + double altitude = glm::length( cameraPositionModelSpace - posHandle.centerToReferenceSurface ); + + if (glm::length(cameraPositionModelSpace) < + glm::length(posHandle.centerToReferenceSurface)) + { + altitude = -altitude; + } + std::pair dist = simplifyDistance(altitude); penPosition.y -= _font->height(); diff --git a/modules/globebrowsing/src/globetranslation.cpp b/modules/globebrowsing/src/globetranslation.cpp index cae9cc2381..560994bed4 100644 --- a/modules/globebrowsing/src/globetranslation.cpp +++ b/modules/globebrowsing/src/globetranslation.cpp @@ -58,20 +58,21 @@ namespace { "globe. The default value is 0.0" }; - constexpr openspace::properties::Property::PropertyInfo FixedAltitudeInfo = { - "FixedAltitude", - "Fixed Altitude", - "The altitude in meters of the location on the globe's surface. This value is " - "used if the 'UseFixedAltitude' property is 'true'. The default value is 10000km." + constexpr openspace::properties::Property::PropertyInfo AltitudeInfo = { + "Altitude", + "Altitude", + "The altitude in meters. " + "If the 'UseHeightmap' property is 'true', this is an offset from the actual " + "surface of the globe. If not, this is an offset from the reference ellipsoid." + "The default value is 0.0" }; - constexpr openspace::properties::Property::PropertyInfo UseFixedAltitudeInfo = { - "UseFixedAltitude", - "Use Fixed Altitude", - "If this value is 'true', the altitude specified in 'FixedAltitude' is used for " - "this translation. If it is 'false', the altitude will be computed based on the " - "height information that is available about the globe to which this translation " - "is attached. The default value is 'true'." + constexpr openspace::properties::Property::PropertyInfo UseHeightmapInfo = { + "UseHeightmap", + "Use Heightmap", + "If this value is 'true', the altitude specified in 'Altitude' will be treated " + "as an offset from the heightmap. Otherwise, it will be an offset from the " + "globe's reference ellipsoid. The default value is 'false'." }; } // namespace @@ -81,8 +82,8 @@ documentation::Documentation GlobeTranslation::Documentation() { using namespace openspace::documentation; return { - "Spice Translation", - "space_translation_spicetranslation", + "Globe Translation", + "space_translation_globetranslation", { { "Type", @@ -110,16 +111,16 @@ documentation::Documentation GlobeTranslation::Documentation() { LatitudeInfo.description, }, { - FixedAltitudeInfo.identifier, + AltitudeInfo.identifier, new DoubleVerifier, Optional::Yes, - FixedAltitudeInfo.description + AltitudeInfo.description }, { - UseFixedAltitudeInfo.identifier, + UseHeightmapInfo.identifier, new BoolVerifier, Optional::Yes, - UseFixedAltitudeInfo.description + UseHeightmapInfo.description } } }; @@ -129,8 +130,8 @@ GlobeTranslation::GlobeTranslation(const ghoul::Dictionary& dictionary) : _globe(GlobeInfo) , _longitude(LongitudeInfo, 0.0, -180.0, 180.0) , _latitude(LatitudeInfo, 0.0, -90.0, 90.0) - , _fixedAltitude(FixedAltitudeInfo, 1e8, 0.0, 1e12) - , _useFixedAltitude(UseFixedAltitudeInfo, false) + , _altitude(AltitudeInfo, 0.0, 0.0, 1e12) + , _useHeightmap(UseHeightmapInfo, false) { documentation::testSpecificationAndThrow( Documentation(), @@ -145,11 +146,11 @@ GlobeTranslation::GlobeTranslation(const ghoul::Dictionary& dictionary) if (dictionary.hasKey(LatitudeInfo.identifier)) { _latitude = dictionary.value(LatitudeInfo.identifier); } - if (dictionary.hasKey(FixedAltitudeInfo.identifier)) { - _fixedAltitude = dictionary.value(FixedAltitudeInfo.identifier); + if (dictionary.hasKey(AltitudeInfo.identifier)) { + _altitude = dictionary.value(AltitudeInfo.identifier); } - if (dictionary.hasKey(UseFixedAltitudeInfo.identifier)) { - _useFixedAltitude = dictionary.value(UseFixedAltitudeInfo.identifier); + if (dictionary.hasKey(UseHeightmapInfo.identifier)) { + _useHeightmap = dictionary.value(UseHeightmapInfo.identifier); } _globe.onChange([this]() { @@ -159,13 +160,13 @@ GlobeTranslation::GlobeTranslation(const ghoul::Dictionary& dictionary) _longitude.onChange([this]() { _positionIsDirty = true; }); _latitude.onChange([this]() { _positionIsDirty = true; }); - _fixedAltitude.onChange([this]() { _positionIsDirty = true; }); - _useFixedAltitude.onChange([this]() { _positionIsDirty = true; }); + _altitude.onChange([this]() { _positionIsDirty = true; }); + _useHeightmap.onChange([this]() { _positionIsDirty = true; }); addProperty(_longitude); addProperty(_latitude); - addProperty(_fixedAltitude); - addProperty(_useFixedAltitude); + addProperty(_altitude); + addProperty(_useHeightmap); } void GlobeTranslation::fillAttachedNode() { @@ -195,8 +196,8 @@ glm::dvec3 GlobeTranslation::position(const UpdateData&) const { _positionIsDirty = true; } - if (!_useFixedAltitude) { - // If we don't use the fixed altitude, we have to compute the height every frame + if (_useHeightmap) { + // If we use the heightmap, we have to compute the height every frame _positionIsDirty = true; } @@ -204,33 +205,35 @@ glm::dvec3 GlobeTranslation::position(const UpdateData&) const { return _position; } - GlobeBrowsingModule& mod = *(global::moduleEngine.module()); - glm::vec3 pos = mod.cartesianCoordinatesFromGeo( - *_attachedNode, - _latitude, - _longitude, - _fixedAltitude - ); - - if (_useFixedAltitude) { - _position = glm::dvec3(pos); - _positionIsDirty = true; - - return _position; - } - else { - SurfacePositionHandle h = _attachedNode->calculateSurfacePositionHandle(pos); - - pos = mod.cartesianCoordinatesFromGeo( + if (_useHeightmap) { + glm::vec3 groundPos = mod.cartesianCoordinatesFromGeo( *_attachedNode, _latitude, _longitude, - h.heightToSurface + 0.0 ); - _position = glm::dvec3(pos); + SurfacePositionHandle h = + _attachedNode->calculateSurfacePositionHandle(groundPos); + + _position = mod.cartesianCoordinatesFromGeo( + *_attachedNode, + _latitude, + _longitude, + h.heightToSurface + _altitude + ); + return _position; + } + else { + _position = mod.cartesianCoordinatesFromGeo( + *_attachedNode, + _latitude, + _longitude, + _altitude + ); + _positionIsDirty = false; return _position; } } diff --git a/modules/globebrowsing/src/globetranslation.h b/modules/globebrowsing/src/globetranslation.h index 7fbd943b7b..91c0bdf61b 100644 --- a/modules/globebrowsing/src/globetranslation.h +++ b/modules/globebrowsing/src/globetranslation.h @@ -49,8 +49,8 @@ private: properties::StringProperty _globe; properties::DoubleProperty _longitude; properties::DoubleProperty _latitude; - properties::DoubleProperty _fixedAltitude; - properties::BoolProperty _useFixedAltitude; + properties::DoubleProperty _altitude; + properties::BoolProperty _useHeightmap; RenderableGlobe* _attachedNode = nullptr; diff --git a/modules/space/translation/horizonstranslation.cpp b/modules/space/translation/horizonstranslation.cpp index e50d284047..80dca66afe 100644 --- a/modules/space/translation/horizonstranslation.cpp +++ b/modules/space/translation/horizonstranslation.cpp @@ -179,7 +179,7 @@ void HorizonsTranslation::readHorizonsTextFile(const std::string& horizonsTextFi ); // Add position to stored timeline. - _timeline.addKeyframe(timeInJ2000, gPos); + _timeline.addKeyframe(timeInJ2000, std::move(gPos)); std::getline(fileStream, line); }