--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-176_13.09.26_VMC_Img_No_1.png", "10-176_13.10.17_VMC_Img_No_2.png", "10-176_13.10.59_VMC_Img_No_3.png", "10-176_13.22.59_VMC_Img_No_19.png", "10-176_13.23.44_VMC_Img_No_20.png", "10-176_13.29.40_VMC_Img_No_28.png", "10-176_13.30.29_VMC_Img_No_29.png", "10-176_13.31.14_VMC_Img_No_30.png", "10-176_13.31.59_VMC_Img_No_31.png", "10-176_13.32.44_VMC_Img_No_32.png", "10-176_13.33.29_VMC_Img_No_33.png", "10-176_13.34.13_VMC_Img_No_34.png", "10-176_13.34.59_VMC_Img_No_35.png", "10-176_13.35.44_VMC_Img_No_36.png", "10-176_13.36.29_VMC_Img_No_37.png", "10-176_13.37.14_VMC_Img_No_38.png", "10-176_13.37.59_VMC_Img_No_39.png", "10-176_13.38.44_VMC_Img_No_40.png", "10-176_13.39.30_VMC_Img_No_41.png", } dates = { celestia:utctotdb(2010, 06, 25, 13, 09, 26), celestia:utctotdb(2010, 06, 25, 13, 10, 17), celestia:utctotdb(2010, 06, 25, 13, 10, 59), celestia:utctotdb(2010, 06, 25, 13, 22, 59), celestia:utctotdb(2010, 06, 25, 13, 23, 44), celestia:utctotdb(2010, 06, 25, 13, 29, 40), celestia:utctotdb(2010, 06, 25, 13, 30, 29), celestia:utctotdb(2010, 06, 25, 13, 31, 14), celestia:utctotdb(2010, 06, 25, 13, 31, 59), celestia:utctotdb(2010, 06, 25, 13, 32, 44), celestia:utctotdb(2010, 06, 25, 13, 33, 29), celestia:utctotdb(2010, 06, 25, 13, 34, 13), celestia:utctotdb(2010, 06, 25, 13, 34, 59), celestia:utctotdb(2010, 06, 25, 13, 35, 44), celestia:utctotdb(2010, 06, 25, 13, 36, 29), celestia:utctotdb(2010, 06, 25, 13, 37, 14), celestia:utctotdb(2010, 06, 25, 13, 37, 59), celestia:utctotdb(2010, 06, 25, 13, 38, 44), celestia:utctotdb(2010, 06, 25, 13, 39, 30), } xarr = { 2313.930, 2287.343, 2265.368, 1878.045, 1853.200, 1654.188, 1626.464, 1600.935, 1575.340, 1549.681, 1523.959, 1498.748, 1472.327, 1446.418, 1420.449, 1394.419, 1368.331, 1342.183, 1315.395, } zarr = { 13184.71, 13165.054, 13148.413, 12798.533, 12772.55, 12549.552, 12516.409, 12485.445, 12453.975, 12421.996, 12389.508, 12357.248, 12322.998, 12288.972, 12254.43, 12219.37, 12183.791, 12147.691, 12110.249, } yarr = { -1408.452, -1461.858, -1505.790, -2250.272, -2296.158, -2655.868, -2704.883, -2749.782, -2794.570, -2839.245, -2883.802, -2927.255, -2972.559, -3016.752, -3060.818, -3104.755, -3148.561, -3192.231, -3236.730, } obsno = 19 obstring = "25 June 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