--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-238_21.53.43_VMC_Img_No_1.png", "10-238_21.54.31_VMC_Img_No_2.png", "10-238_21.55.13_VMC_Img_No_3.png", "10-238_21.55.56_VMC_Img_No_4.png", "10-238_21.56.39_VMC_Img_No_5.png", "10-238_21.57.22_VMC_Img_No_6.png", "10-238_21.58.05_VMC_Img_No_7.png", "10-238_21.58.48_VMC_Img_No_8.png", "10-238_21.59.31_VMC_Img_No_9.png", "10-238_22.00.13_VMC_Img_No_10.png", "10-238_22.00.57_VMC_Img_No_11.png", "10-238_22.01.40_VMC_Img_No_12.png", "10-238_22.02.23_VMC_Img_No_13.png", "10-238_22.03.06_VMC_Img_No_14.png", "10-238_22.03.49_VMC_Img_No_15.png", "10-238_22.04.32_VMC_Img_No_16.png", "10-238_22.05.15_VMC_Img_No_17.png", "10-238_22.05.58_VMC_Img_No_18.png", "10-238_22.06.41_VMC_Img_No_19.png", "10-238_22.07.24_VMC_Img_No_20.png", "10-238_22.08.07_VMC_Img_No_21.png", "10-238_22.08.50_VMC_Img_No_22.png", "10-238_22.09.33_VMC_Img_No_23.png", "10-238_22.10.16_VMC_Img_No_24.png", "10-238_22.10.59_VMC_Img_No_25.png", "10-238_22.11.41_VMC_Img_No_26.png", "10-238_22.12.25_VMC_Img_No_27.png", "10-238_22.13.08_VMC_Img_No_28.png", "10-238_22.13.51_VMC_Img_No_29.png", "10-238_22.14.34_VMC_Img_No_30.png", "10-238_22.15.17_VMC_Img_No_31.png", "10-238_22.16.00_VMC_Img_No_32.png", "10-238_22.16.43_VMC_Img_No_33.png", "10-238_22.17.26_VMC_Img_No_34.png", "10-238_22.18.09_VMC_Img_No_35.png", "10-238_22.18.52_VMC_Img_No_36.png", "10-238_22.19.35_VMC_Img_No_37.png", "10-238_22.20.18_VMC_Img_No_38.png", } dates = { celestia:utctotdb(2010, 08, 26, 21, 53, 43), celestia:utctotdb(2010, 08, 26, 21, 54, 31), celestia:utctotdb(2010, 08, 26, 21, 55, 13), celestia:utctotdb(2010, 08, 26, 21, 55, 56), celestia:utctotdb(2010, 08, 26, 21, 56, 39), celestia:utctotdb(2010, 08, 26, 21, 57, 22), celestia:utctotdb(2010, 08, 26, 21, 58, 05), celestia:utctotdb(2010, 08, 26, 21, 58, 48), celestia:utctotdb(2010, 08, 26, 21, 59, 31), celestia:utctotdb(2010, 08, 26, 22, 00, 13), celestia:utctotdb(2010, 08, 26, 22, 00, 57), celestia:utctotdb(2010, 08, 26, 22, 01, 40), celestia:utctotdb(2010, 08, 26, 22, 02, 23), celestia:utctotdb(2010, 08, 26, 22, 03, 06), celestia:utctotdb(2010, 08, 26, 22, 03, 49), celestia:utctotdb(2010, 08, 26, 22, 04, 32), celestia:utctotdb(2010, 08, 26, 22, 05, 15), celestia:utctotdb(2010, 08, 26, 22, 05, 58), celestia:utctotdb(2010, 08, 26, 22, 06, 41), celestia:utctotdb(2010, 08, 26, 22, 07, 24), celestia:utctotdb(2010, 08, 26, 22, 08, 07), celestia:utctotdb(2010, 08, 26, 22, 08, 50), celestia:utctotdb(2010, 08, 26, 22, 09, 33), celestia:utctotdb(2010, 08, 26, 22, 10, 16), celestia:utctotdb(2010, 08, 26, 22, 10, 59), celestia:utctotdb(2010, 08, 26, 22, 11, 41), celestia:utctotdb(2010, 08, 26, 22, 12, 25), celestia:utctotdb(2010, 08, 26, 22, 13, 08), celestia:utctotdb(2010, 08, 26, 22, 13, 51), celestia:utctotdb(2010, 08, 26, 22, 14, 34), celestia:utctotdb(2010, 08, 26, 22, 15, 17), celestia:utctotdb(2010, 08, 26, 22, 16, 00), celestia:utctotdb(2010, 08, 26, 22, 16, 43), celestia:utctotdb(2010, 08, 26, 22, 17, 26), celestia:utctotdb(2010, 08, 26, 22, 18, 09), celestia:utctotdb(2010, 08, 26, 22, 18, 52), celestia:utctotdb(2010, 08, 26, 22, 19, 35), celestia:utctotdb(2010, 08, 26, 22, 20, 18), } xarr = { 4333.619, 4314.007, 4296.703, 4278.849, 4260.855, 4242.721, 4224.447, 4206.033, 4187.480, 4169.223, 4149.954, 4130.982, 4111.871, 4092.621, 4073.231, 4053.702, 4034.034, 4014.227, 3994.281, 3974.197, 3953.973, 3933.611, 3913.111, 3892.472, 3871.694, 3851.266, 3829.724, 3808.531, 3787.200, 3765.731, 3744.124, 3722.380, 3700.497, 3678.476, 3656.318, 3634.022, 3611.588, 3589.017, } zarr = { 10908.443, 10926.861, 10942.614, 10958.39, 10973.807, 10988.863, 11003.558, 11017.889, 11031.853, 11045.139, 11058.678, 11071.535, 11084.017, 11096.125, 11107.855, 11119.206, 11130.176, 11140.762, 11150.963, 11160.777, 11170.201, 11179.233, 11187.872, 11196.115, 11203.959, 11211.235, 11218.445, 11225.081, 11231.311, 11237.131, 11242.539, 11247.533, 11252.111, 11256.269, 11260.006, 11263.319, 11266.206, 11268.664, } yarr = { 6616.641, 6564.179, 6518.056, 6470.625, 6422.982, 6375.128, 6327.064, 6278.791, 6230.309, 6182.754, 6132.722, 6083.620, 6034.312, 5984.800, 5935.084, 5885.165, 5835.044, 5784.723, 5734.201, 5683.480, 5632.560, 5581.443, 5530.129, 5478.620, 5426.915, 5376.226, 5322.925, 5270.641, 5218.166, 5165.500, 5112.645, 5059.602, 5006.371, 4952.954, 4899.351, 4845.564, 4791.593, 4737.439, } obsno = 38 obstring = "26 August 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