--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_11.23.55_VMC_Img_No_1.png", "10-176_11.24.42_VMC_Img_No_2.png", "10-176_11.25.24_VMC_Img_No_3.png", "10-176_11.26.07_VMC_Img_No_4.png", "10-176_11.26.50_VMC_Img_No_5.png", "10-176_11.27.33_VMC_Img_No_6.png", "10-176_11.28.16_VMC_Img_No_7.png", "10-176_11.28.59_VMC_Img_No_8.png", "10-176_11.29.42_VMC_Img_No_9.png", "10-176_11.30.25_VMC_Img_No_10.png", "10-176_11.31.08_VMC_Img_No_11.png", "10-176_11.31.51_VMC_Img_No_12.png", "10-176_11.32.34_VMC_Img_No_13.png", "10-176_11.33.17_VMC_Img_No_14.png", "10-176_11.34.00_VMC_Img_No_15.png", "10-176_11.34.43_VMC_Img_No_16.png", "10-176_11.35.25_VMC_Img_No_17.png", "10-176_11.36.09_VMC_Img_No_18.png", "10-176_11.36.52_VMC_Img_No_19.png", "10-176_11.37.35_VMC_Img_No_20.png", "10-176_11.38.18_VMC_Img_No_21.png", "10-176_11.39.01_VMC_Img_No_22.png", } dates = { celestia:utctotdb(2010, 06, 25, 11, 23, 55), celestia:utctotdb(2010, 06, 25, 11, 24, 42), celestia:utctotdb(2010, 06, 25, 11, 25, 24), celestia:utctotdb(2010, 06, 25, 11, 26, 07), celestia:utctotdb(2010, 06, 25, 11, 26, 50), celestia:utctotdb(2010, 06, 25, 11, 27, 33), celestia:utctotdb(2010, 06, 25, 11, 28, 16), celestia:utctotdb(2010, 06, 25, 11, 28, 59), celestia:utctotdb(2010, 06, 25, 11, 29, 42), celestia:utctotdb(2010, 06, 25, 11, 30, 25), celestia:utctotdb(2010, 06, 25, 11, 31, 08), celestia:utctotdb(2010, 06, 25, 11, 31, 51), celestia:utctotdb(2010, 06, 25, 11, 32, 34), celestia:utctotdb(2010, 06, 25, 11, 33, 17), celestia:utctotdb(2010, 06, 25, 11, 34, 00), celestia:utctotdb(2010, 06, 25, 11, 34, 43), celestia:utctotdb(2010, 06, 25, 11, 35, 25), celestia:utctotdb(2010, 06, 25, 11, 36, 09), celestia:utctotdb(2010, 06, 25, 11, 36, 52), celestia:utctotdb(2010, 06, 25, 11, 37, 35), celestia:utctotdb(2010, 06, 25, 11, 38, 18), celestia:utctotdb(2010, 06, 25, 11, 39, 01), } xarr = { 4539.657, 4533.151, 4527.176, 4520.903, 4514.471, 4507.884, 4501.140, 4494.242, 4487.190, 4479.986, 4472.629, 4465.121, 4457.462, 4449.654, 4441.698, 4433.593, 4425.536, 4416.944, 4408.401, 4399.714, 4390.882, 4381.908, } zarr = { 11229.04, 11274.871, 11315.426, 11356.556, 11397.29, 11437.629, 11477.573, 11517.123, 11556.278, 11595.04, 11633.409, 11671.384, 11708.966, 11746.156, 11782.953, 11819.359, 11854.539, 11890.994, 11926.224, 11961.064, 11995.512, 12029.57, } yarr = { 4963.105, 4923.308, 4887.568, 4850.810, 4813.882, 4776.787, 4739.527, 4702.104, 4664.520, 4626.777, 4588.878, 4550.822, 4512.614, 4474.254, 4435.745, 4397.088, 4359.189, 4319.338, 4280.249, 4241.020, 4201.652, 4162.147, } obsno = 22 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