--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-302_14.36.31_VMC_Img_No_1.png", "09-302_14.37.27_VMC_Img_No_2.png", "09-302_14.38.19_VMC_Img_No_3.png", "09-302_14.39.13_VMC_Img_No_4.png", "09-302_14.40.07_VMC_Img_No_5.png", "09-302_14.40.59_VMC_Img_No_6.png", "09-302_14.41.53_VMC_Img_No_7.png", "09-302_14.42.47_VMC_Img_No_8.png", "09-302_14.43.39_VMC_Img_No_9.png", "09-302_14.44.33_VMC_Img_No_10.png", "09-302_14.45.27_VMC_Img_No_11.png", "09-302_14.46.19_VMC_Img_No_12.png", "09-302_14.47.13_VMC_Img_No_13.png", "09-302_14.48.07_VMC_Img_No_14.png", "09-302_14.48.59_VMC_Img_No_15.png", "09-302_14.49.53_VMC_Img_No_16.png", "09-302_14.50.47_VMC_Img_No_17.png", "09-302_14.51.39_VMC_Img_No_18.png", "09-302_14.52.33_VMC_Img_No_19.png", "09-302_14.53.27_VMC_Img_No_20.png", "09-302_14.54.19_VMC_Img_No_21.png", "09-302_14.55.13_VMC_Img_No_22.png", "09-302_14.56.07_VMC_Img_No_23.png", "09-302_14.56.59_VMC_Img_No_24.png", "09-302_14.57.53_VMC_Img_No_25.png", "09-302_14.58.47_VMC_Img_No_26.png", "09-302_14.59.39_VMC_Img_No_27.png", "09-302_15.00.33_VMC_Img_No_28.png", "09-302_15.01.27_VMC_Img_No_29.png", "09-302_15.02.19_VMC_Img_No_30.png", "09-302_15.03.13_VMC_Img_No_31.png", "09-302_15.04.07_VMC_Img_No_32.png", "09-302_15.04.59_VMC_Img_No_33.png", "09-302_15.05.51_VMC_Img_No_34.png", } dates = { celestia:utctotdb(2009, 10, 29, 14, 36, 31), celestia:utctotdb(2009, 10, 29, 14, 37, 27), celestia:utctotdb(2009, 10, 29, 14, 38, 19), celestia:utctotdb(2009, 10, 29, 14, 39, 13), celestia:utctotdb(2009, 10, 29, 14, 40, 07), celestia:utctotdb(2009, 10, 29, 14, 40, 59), celestia:utctotdb(2009, 10, 29, 14, 41, 53), celestia:utctotdb(2009, 10, 29, 14, 42, 47), celestia:utctotdb(2009, 10, 29, 14, 43, 39), celestia:utctotdb(2009, 10, 29, 14, 44, 33), celestia:utctotdb(2009, 10, 29, 14, 45, 27), celestia:utctotdb(2009, 10, 29, 14, 46, 19), celestia:utctotdb(2009, 10, 29, 14, 47, 13), celestia:utctotdb(2009, 10, 29, 14, 48, 07), celestia:utctotdb(2009, 10, 29, 14, 48, 59), celestia:utctotdb(2009, 10, 29, 14, 49, 53), celestia:utctotdb(2009, 10, 29, 14, 50, 47), celestia:utctotdb(2009, 10, 29, 14, 51, 39), celestia:utctotdb(2009, 10, 29, 14, 52, 33), celestia:utctotdb(2009, 10, 29, 14, 53, 27), celestia:utctotdb(2009, 10, 29, 14, 54, 19), celestia:utctotdb(2009, 10, 29, 14, 55, 13), celestia:utctotdb(2009, 10, 29, 14, 56, 07), celestia:utctotdb(2009, 10, 29, 14, 56, 59), celestia:utctotdb(2009, 10, 29, 14, 57, 53), celestia:utctotdb(2009, 10, 29, 14, 58, 47), celestia:utctotdb(2009, 10, 29, 14, 59, 39), celestia:utctotdb(2009, 10, 29, 15, 00, 33), celestia:utctotdb(2009, 10, 29, 15, 01, 27), celestia:utctotdb(2009, 10, 29, 15, 02, 19), celestia:utctotdb(2009, 10, 29, 15, 03, 13), celestia:utctotdb(2009, 10, 29, 15, 04, 07), celestia:utctotdb(2009, 10, 29, 15, 04, 59), celestia:utctotdb(2009, 10, 29, 15, 05, 51), } xarr = { -7400.942, -7387.908, -7375.425, -7362.070, -7348.318, -7334.698, -7320.161, -7305.224, -7290.459, -7274.731, -7258.599, -7242.682, -7225.753, -7208.418, -7191.338, -7173.200, -7154.651, -7136.400, -7117.042, -7097.270, -7077.837, -7057.249, -7036.242, -7015.618, -6993.787, -6971.535, -6949.708, -6926.624, -6903.115, -6880.072, -6855.723, -6830.944, -6806.675, -6782.005, } zarr = { -9531.896, -9553.93, -9573.897, -9594.126, -9613.835, -9632.322, -9651.003, -9669.156, -9686.134, -9703.24, -9719.806, -9735.247, -9750.745, -9765.694, -9779.567, -9793.426, -9806.726, -9818.999, -9831.187, -9842.803, -9853.445, -9863.927, -9873.825, -9882.8, -9891.54, -9899.684, -9906.959, -9913.919, -9920.271, -9925.807, -9930.95, -9935.47, -9939.229, -9942.403, } yarr = { -5520.470, -5455.952, -5395.761, -5332.969, -5269.888, -5208.873, -5145.233, -5081.310, -5019.491, -4955.021, -4890.276, -4827.671, -4762.392, -4696.845, -4633.474, -4567.407, -4501.078, -4436.960, -4370.125, -4303.035, -4238.192, -4170.610, -4102.782, -4037.234, -3968.928, -3900.382, -3834.151, -3765.143, -3695.904, -3629.013, -3559.327, -3489.418, -3421.890, -3354.159, } obsno = 34 obstring = "29 October 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