--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 = { "11-177_20.49.15_VMC_Img_No_1.png", "11-177_20.50.03_VMC_Img_No_2.png", "11-177_20.50.45_VMC_Img_No_3.png", "11-177_20.51.28_VMC_Img_No_4.png", "11-177_20.52.11_VMC_Img_No_5.png", "11-177_20.52.54_VMC_Img_No_6.png", "11-177_20.53.37_VMC_Img_No_7.png", "11-177_20.54.20_VMC_Img_No_8.png", "11-177_20.55.03_VMC_Img_No_9.png", "11-177_20.55.46_VMC_Img_No_10.png", "11-177_20.56.29_VMC_Img_No_11.png", "11-177_20.57.12_VMC_Img_No_12.png", "11-177_20.57.55_VMC_Img_No_13.png", "11-177_20.58.37_VMC_Img_No_14.png", "11-177_20.59.21_VMC_Img_No_15.png", "11-177_21.00.04_VMC_Img_No_16.png", "11-177_21.00.47_VMC_Img_No_17.png", "11-177_21.01.30_VMC_Img_No_18.png", "11-177_21.02.13_VMC_Img_No_19.png", "11-177_21.02.56_VMC_Img_No_20.png", "11-177_21.03.39_VMC_Img_No_21.png", "11-177_21.04.21_VMC_Img_No_22.png", } dates = { celestia:utctotdb(2011, 06, 26, 20, 49, 15), celestia:utctotdb(2011, 06, 26, 20, 50, 03), celestia:utctotdb(2011, 06, 26, 20, 50, 45), celestia:utctotdb(2011, 06, 26, 20, 51, 28), celestia:utctotdb(2011, 06, 26, 20, 52, 11), celestia:utctotdb(2011, 06, 26, 20, 52, 54), celestia:utctotdb(2011, 06, 26, 20, 53, 37), celestia:utctotdb(2011, 06, 26, 20, 54, 20), celestia:utctotdb(2011, 06, 26, 20, 55, 03), celestia:utctotdb(2011, 06, 26, 20, 55, 46), celestia:utctotdb(2011, 06, 26, 20, 56, 29), celestia:utctotdb(2011, 06, 26, 20, 57, 12), celestia:utctotdb(2011, 06, 26, 20, 57, 55), celestia:utctotdb(2011, 06, 26, 20, 58, 37), celestia:utctotdb(2011, 06, 26, 20, 59, 21), celestia:utctotdb(2011, 06, 26, 21, 00, 04), celestia:utctotdb(2011, 06, 26, 21, 00, 47), celestia:utctotdb(2011, 06, 26, 21, 01, 30), celestia:utctotdb(2011, 06, 26, 21, 02, 13), celestia:utctotdb(2011, 06, 26, 21, 02, 56), celestia:utctotdb(2011, 06, 26, 21, 03, 39), celestia:utctotdb(2011, 06, 26, 21, 04, 21), } xarr = { -970.296, -943.660, -920.321, -896.397, -872.443, -848.460, -824.448, -800.409, -776.343, -752.251, -728.134, -703.992, -679.825, -656.199, -631.424, -607.190, -582.934, -558.659, -534.364, -510.050, -485.718, -461.936, } zarr = { -10736.814, -10755.018, -10770.585, -10786.173, -10801.404, -10816.278, -10830.791, -10844.942, -10858.729, -10872.151, -10885.205, -10897.89, -10910.204, -10921.871, -10933.71, -10944.898, -10955.708, -10966.136, -10976.18, -10985.84, -10995.112, -11003.793, } yarr = { -8006.955, -7957.088, -7913.187, -7867.983, -7822.519, -7776.795, -7730.813, -7684.572, -7638.073, -7591.317, -7544.304, -7497.035, -7449.511, -7402.846, -7353.699, -7305.412, -7256.871, -7208.079, -7159.034, -7109.738, -7060.191, -7011.555, } obsno = 22 obstring = "26 June 2011" --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