--First stop time celestia:settimescale(0) --Then get variables containing Mars, the observer and the Celestia co-ord->km conversion factors mars = celestia:find("Mars") obs = celestia:getobserver() km_per_mly=9466411.842 mly_per_km=1.0 / km_per_mly --Clear render flags & labels celestia:hide("orbits", "constellations", "boundaries", "markers", "grid") celestia:hidelabel("planets", "moons", "spacecraft", "asteroids", "comets", "constellations", "stars", "galaxies", "locations") --Preload Mars textures mars:preloadtexture() --Create arrays with the TASC generated MEX locations for each image names = { "10-344_23.44.33_VMC_Img_No_1.png", "10-344_23.45.20_VMC_Img_No_2.png", "10-344_23.46.02_VMC_Img_No_3.png", "10-344_23.46.45_VMC_Img_No_4.png", "10-344_23.47.28_VMC_Img_No_5.png", "10-344_23.48.11_VMC_Img_No_6.png", "10-344_23.48.54_VMC_Img_No_7.png", "10-344_23.49.37_VMC_Img_No_8.png", "10-344_23.50.20_VMC_Img_No_9.png", "10-344_23.51.03_VMC_Img_No_10.png", "10-344_23.51.46_VMC_Img_No_11.png", "10-344_23.52.29_VMC_Img_No_12.png", "10-344_23.53.12_VMC_Img_No_13.png", "10-344_23.53.55_VMC_Img_No_14.png", "10-344_23.54.37_VMC_Img_No_15.png", "10-344_23.55.21_VMC_Img_No_16.png", "10-344_23.56.04_VMC_Img_No_17.png", "10-344_23.56.47_VMC_Img_No_18.png", "10-344_23.57.30_VMC_Img_No_19.png", "10-344_23.58.13_VMC_Img_No_20.png", "10-344_23.58.56_VMC_Img_No_21.png", "10-344_23.59.39_VMC_Img_No_22.png", "10-345_00.00.21_VMC_Img_No_23.png", "10-345_00.01.05_VMC_Img_No_24.png", "10-345_00.01.48_VMC_Img_No_25.png", "10-345_00.02.31_VMC_Img_No_26.png", "10-345_00.03.14_VMC_Img_No_27.png", "10-345_00.03.57_VMC_Img_No_28.png", "10-345_00.04.40_VMC_Img_No_29.png", "10-345_00.05.23_VMC_Img_No_30.png", "10-345_00.06.05_VMC_Img_No_31.png", "10-345_00.06.49_VMC_Img_No_32.png", "10-345_00.07.32_VMC_Img_No_33.png", "10-345_00.08.15_VMC_Img_No_34.png", "10-345_00.08.58_VMC_Img_No_35.png", "10-345_00.09.41_VMC_Img_No_36.png", "10-345_00.10.24_VMC_Img_No_37.png", "10-345_00.11.07_VMC_Img_No_38.png", "10-345_00.11.49_VMC_Img_No_39.png", "10-345_00.12.33_VMC_Img_No_40.png", "10-345_00.13.16_VMC_Img_No_41.png", "10-345_00.13.59_VMC_Img_No_42.png", "10-345_00.14.42_VMC_Img_No_43.png", } dates = { celestia:utctotdb(2010, 12, 10, 23, 44, 33), celestia:utctotdb(2010, 12, 10, 23, 45, 20), celestia:utctotdb(2010, 12, 10, 23, 46, 02), celestia:utctotdb(2010, 12, 10, 23, 46, 45), celestia:utctotdb(2010, 12, 10, 23, 47, 28), celestia:utctotdb(2010, 12, 10, 23, 48, 11), celestia:utctotdb(2010, 12, 10, 23, 48, 54), celestia:utctotdb(2010, 12, 10, 23, 49, 37), celestia:utctotdb(2010, 12, 10, 23, 50, 20), celestia:utctotdb(2010, 12, 10, 23, 51, 03), celestia:utctotdb(2010, 12, 10, 23, 51, 46), celestia:utctotdb(2010, 12, 10, 23, 52, 29), celestia:utctotdb(2010, 12, 10, 23, 53, 12), celestia:utctotdb(2010, 12, 10, 23, 53, 55), celestia:utctotdb(2010, 12, 10, 23, 54, 37), celestia:utctotdb(2010, 12, 10, 23, 55, 21), celestia:utctotdb(2010, 12, 10, 23, 56, 04), celestia:utctotdb(2010, 12, 10, 23, 56, 47), celestia:utctotdb(2010, 12, 10, 23, 57, 30), celestia:utctotdb(2010, 12, 10, 23, 58, 13), celestia:utctotdb(2010, 12, 10, 23, 58, 56), celestia:utctotdb(2010, 12, 10, 23, 59, 39), celestia:utctotdb(2010, 12, 11, 00, 00, 21), celestia:utctotdb(2010, 12, 11, 00, 01, 05), celestia:utctotdb(2010, 12, 11, 00, 01, 48), celestia:utctotdb(2010, 12, 11, 00, 02, 31), celestia:utctotdb(2010, 12, 11, 00, 03, 14), celestia:utctotdb(2010, 12, 11, 00, 03, 57), celestia:utctotdb(2010, 12, 11, 00, 04, 40), celestia:utctotdb(2010, 12, 11, 00, 05, 23), celestia:utctotdb(2010, 12, 11, 00, 06, 05), celestia:utctotdb(2010, 12, 11, 00, 06, 49), celestia:utctotdb(2010, 12, 11, 00, 07, 32), celestia:utctotdb(2010, 12, 11, 00, 08, 15), celestia:utctotdb(2010, 12, 11, 00, 08, 58), celestia:utctotdb(2010, 12, 11, 00, 09, 41), celestia:utctotdb(2010, 12, 11, 00, 10, 24), celestia:utctotdb(2010, 12, 11, 00, 11, 07), celestia:utctotdb(2010, 12, 11, 00, 11, 49), celestia:utctotdb(2010, 12, 11, 00, 12, 33), celestia:utctotdb(2010, 12, 11, 00, 13, 16), celestia:utctotdb(2010, 12, 11, 00, 13, 59), celestia:utctotdb(2010, 12, 11, 00, 14, 42), } xarr = { 5280.148, 5276.896, 5273.817, 5270.495, 5267.000, 5263.333, 5259.493, 5255.478, 5251.290, 5246.926, 5242.387, 5237.673, 5232.781, 5227.713, 5222.591, 5217.043, 5211.441, 5205.658, 5199.697, 5193.554, 5187.231, 5180.725, 5174.195, 5167.167, 5160.113, 5152.875, 5145.452, 5137.843, 5130.048, 5122.067, 5114.090, 5105.540, 5096.994, 5088.258, 5079.332, 5070.215, 5060.906, 5051.404, 5041.937, 5031.821, 5021.737, 5011.458, 5000.983, } zarr = { -1787.055, -1730.122, -1679.189, -1626.99, -1574.737, -1522.433, -1470.078, -1417.675, -1365.225, -1312.729, -1260.19, -1207.608, -1154.986, -1102.325, -1050.852, -996.892, -944.123, -891.322, -838.49, -785.629, -732.741, -679.827, -628.12, -573.929, -520.949, -467.95, -414.934, -361.904, -308.86, -255.805, -203.975, -149.669, -96.592, -43.511, 9.572, 62.654, 115.734, 168.809, 220.644, 274.938, 327.988, 381.024, 434.046, } yarr = { 12270.033, 12261.270, 12253.037, 12244.213, 12234.989, 12225.364, 12215.336, 12204.905, 12194.069, 12182.827, 12171.178, 12159.120, 12146.652, 12133.774, 12120.797, 12106.780, 12092.661, 12078.126, 12063.174, 12047.803, 12032.012, 12015.800, 11999.556, 11982.105, 11964.620, 11946.708, 11928.367, 11909.597, 11890.394, 11870.759, 11851.161, 11830.183, 11809.239, 11787.857, 11766.033, 11743.766, 11721.056, 11697.900, 11674.850, 11650.243, 11625.739, 11600.783, 11575.372, } obsno = 43 obstring = "10 December 2010" --Set the initial time celestia:settime(dates[1]); --Go to Mars then write title obs:track(mars) celestia:flash("European Space Agency\nMars Express Visual Monitoring Camera\nObservation "..obstring, 15) obs:goto(mars,5) obs:goto((mars:getposition() + celestia:newvector(xarr[1], yarr[1], zarr[1]) * (mly_per_km)),5) wait(10) celestia:flash("Press 'M' for next image, 'N' for previous image.\nUse left and right arrow keys to rotate the\nplanet to the same orientation as the image.", 10) wait(10) celestia:showlabel("locations", "moons", "spacecraft") --Create a function that goes to a given image number gotoimage = function(imgno) celestia:settime(dates[imgno]) obs:setposition(mars:getposition() + celestia:newvector(xarr[imgno], yarr[imgno], zarr[imgno]) * (mly_per_km)) celestia:select(mars) obs:track(mars) celestia:flash(names[imgno], 60) end --Create a function that will go to the next image in the series next = function(goto) if (count + 1)>obsno then count = 1 else count = count + 1 end gotoimage(count) end --Create a function that will go to the previous image in the series last = function() if (count - 1)<1 then count = obsno else count = count - 1 end gotoimage(count) end --Create a counter holding the position of the current image count = 1 --Set the position to the first image gotoimage(count) --Add the necessary keyboard callback code keymap = { n = last, m = next } celestia_keyboard_callback = function(key) f = keymap[key] if f then f() return true end return false end celestia:requestkeyboard(true) repeat wait(10) until false