--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 = { "09-357_08.06.52_VMC_Img_No_1.png", "09-357_08.07.47_VMC_Img_No_2.png", "09-357_08.08.32_VMC_Img_No_3.png", "09-357_08.09.15_VMC_Img_No_4.png", "09-357_08.10.00_VMC_Img_No_5.png", "09-357_08.10.43_VMC_Img_No_6.png", "09-357_08.11.28_VMC_Img_No_7.png", "09-357_08.12.11_VMC_Img_No_8.png", "09-357_08.12.56_VMC_Img_No_9.png", "09-357_08.13.39_VMC_Img_No_10.png", "09-357_08.14.24_VMC_Img_No_11.png", "09-357_08.15.07_VMC_Img_No_12.png", "09-357_08.15.52_VMC_Img_No_13.png", "09-357_08.16.36_VMC_Img_No_14.png", "09-357_08.17.20_VMC_Img_No_15.png", "09-357_08.18.03_VMC_Img_No_16.png", "09-357_08.18.48_VMC_Img_No_17.png", "09-357_08.19.31_VMC_Img_No_18.png", "09-357_08.20.16_VMC_Img_No_19.png", "09-357_08.20.59_VMC_Img_No_20.png", "09-357_08.21.44_VMC_Img_No_21.png", "09-357_08.22.27_VMC_Img_No_22.png", "09-357_08.23.12_VMC_Img_No_23.png", "09-357_08.23.55_VMC_Img_No_24.png", "09-357_08.24.40_VMC_Img_No_25.png", "09-357_08.25.23_VMC_Img_No_26.png", "09-357_08.26.08_VMC_Img_No_27.png", "09-357_08.26.51_VMC_Img_No_28.png", "09-357_08.27.36_VMC_Img_No_29.png", "09-357_08.28.20_VMC_Img_No_30.png", "09-357_08.29.04_VMC_Img_No_31.png", "09-357_08.29.47_VMC_Img_No_32.png", "09-357_08.30.32_VMC_Img_No_33.png", "09-357_08.31.15_VMC_Img_No_34.png", "09-357_08.32.00_VMC_Img_No_35.png", "09-357_08.32.43_VMC_Img_No_36.png", "09-357_08.33.28_VMC_Img_No_37.png", "09-357_08.34.12_VMC_Img_No_38.png", "09-357_08.34.56_VMC_Img_No_39.png", "09-357_08.35.39_VMC_Img_No_40.png", "09-357_08.36.23_VMC_Img_No_41.png", } dates = { celestia:utctotdb(2009, 12, 23, 08, 06, 52), celestia:utctotdb(2009, 12, 23, 08, 07, 47), celestia:utctotdb(2009, 12, 23, 08, 08, 32), celestia:utctotdb(2009, 12, 23, 08, 09, 15), celestia:utctotdb(2009, 12, 23, 08, 10, 00), celestia:utctotdb(2009, 12, 23, 08, 10, 43), celestia:utctotdb(2009, 12, 23, 08, 11, 28), celestia:utctotdb(2009, 12, 23, 08, 12, 11), celestia:utctotdb(2009, 12, 23, 08, 12, 56), celestia:utctotdb(2009, 12, 23, 08, 13, 39), celestia:utctotdb(2009, 12, 23, 08, 14, 24), celestia:utctotdb(2009, 12, 23, 08, 15, 07), celestia:utctotdb(2009, 12, 23, 08, 15, 52), celestia:utctotdb(2009, 12, 23, 08, 16, 36), celestia:utctotdb(2009, 12, 23, 08, 17, 20), celestia:utctotdb(2009, 12, 23, 08, 18, 03), celestia:utctotdb(2009, 12, 23, 08, 18, 48), celestia:utctotdb(2009, 12, 23, 08, 19, 31), celestia:utctotdb(2009, 12, 23, 08, 20, 16), celestia:utctotdb(2009, 12, 23, 08, 20, 59), celestia:utctotdb(2009, 12, 23, 08, 21, 44), celestia:utctotdb(2009, 12, 23, 08, 22, 27), celestia:utctotdb(2009, 12, 23, 08, 23, 12), celestia:utctotdb(2009, 12, 23, 08, 23, 55), celestia:utctotdb(2009, 12, 23, 08, 24, 40), celestia:utctotdb(2009, 12, 23, 08, 25, 23), celestia:utctotdb(2009, 12, 23, 08, 26, 08), celestia:utctotdb(2009, 12, 23, 08, 26, 51), celestia:utctotdb(2009, 12, 23, 08, 27, 36), celestia:utctotdb(2009, 12, 23, 08, 28, 20), celestia:utctotdb(2009, 12, 23, 08, 29, 04), celestia:utctotdb(2009, 12, 23, 08, 29, 47), celestia:utctotdb(2009, 12, 23, 08, 30, 32), celestia:utctotdb(2009, 12, 23, 08, 31, 15), celestia:utctotdb(2009, 12, 23, 08, 32, 00), celestia:utctotdb(2009, 12, 23, 08, 32, 43), celestia:utctotdb(2009, 12, 23, 08, 33, 28), celestia:utctotdb(2009, 12, 23, 08, 34, 12), celestia:utctotdb(2009, 12, 23, 08, 34, 56), celestia:utctotdb(2009, 12, 23, 08, 35, 39), celestia:utctotdb(2009, 12, 23, 08, 36, 23), } xarr = { 1703.562, 1662.916, 1628.976, 1596.003, 1560.959, 1526.985, 1490.947, 1456.074, 1419.146, 1383.468, 1345.743, 1309.344, 1270.907, 1233.001, 1194.794, 1157.182, 1117.547, 1079.429, 1039.296, 1000.730, 960.159, 921.201, 880.245, 840.944, 799.654, 760.056, 718.477, 678.624, 636.800, 595.797, 554.698, 514.447, 472.243, 431.845, 389.501, 348.985, 306.533, 264.981, 223.393, 182.722, 141.081, } zarr = { 5430.923, 5474.784, 5508.424, 5538.736, 5568.588, 5595.374, 5621.633, 5645.076, 5667.928, 5688.2, 5707.818, 5725.08, 5741.629, 5756.352, 5769.668, 5781.356, 5792.222, 5801.33, 5809.563, 5816.219, 5821.947, 5826.268, 5829.614, 5831.713, 5832.789, 5832.772, 5831.686, 5829.652, 5826.505, 5822.445, 5817.435, 5811.642, 5804.653, 5797.109, 5788.328, 5779.111, 5768.619, 5757.543, 5745.675, 5733.331, 5719.951, } yarr = { -2171.547, -2326.011, -2451.440, -2570.478, -2694.185, -2811.552, -2933.487, -3049.142, -3169.267, -3283.178, -3401.465, -3513.610, -3630.040, -3742.960, -3854.965, -3963.539, -4076.224, -4183.005, -4293.815, -4398.803, -4507.740, -4610.941, -4718.011, -4819.433, -4924.646, -5024.299, -5127.667, -5225.564, -5327.101, -5425.482, -5522.978, -5617.406, -5715.330, -5808.048, -5904.191, -5995.218, -6089.600, -6181.020, -6271.591, -6359.289, -6448.195, } obsno = 41 obstring = "23 December 2009" --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