--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-113_14.28.18_VMC_Img_No_1.png", "10-113_14.29.06_VMC_Img_No_2.png", "10-113_14.29.50_VMC_Img_No_3.png", "10-113_14.30.34_VMC_Img_No_4.png", "10-113_14.31.18_VMC_Img_No_5.png", "10-113_14.32.02_VMC_Img_No_6.png", "10-113_14.32.46_VMC_Img_No_7.png", "10-113_14.33.30_VMC_Img_No_8.png", "10-113_14.34.14_VMC_Img_No_9.png", "10-113_14.34.58_VMC_Img_No_10.png", "10-113_14.35.42_VMC_Img_No_11.png", "10-113_14.36.26_VMC_Img_No_12.png", "10-113_14.37.10_VMC_Img_No_13.png", "10-113_14.37.53_VMC_Img_No_14.png", "10-113_14.38.37_VMC_Img_No_15.png", "10-113_14.39.21_VMC_Img_No_16.png", "10-113_14.40.05_VMC_Img_No_17.png", "10-113_14.40.49_VMC_Img_No_18.png", "10-113_14.41.33_VMC_Img_No_19.png", "10-113_14.42.17_VMC_Img_No_20.png", "10-113_14.43.01_VMC_Img_No_21.png", "10-113_14.43.45_VMC_Img_No_22.png", "10-113_14.44.29_VMC_Img_No_23.png", "10-113_14.45.13_VMC_Img_No_24.png", "10-113_14.45.57_VMC_Img_No_25.png", "10-113_14.46.41_VMC_Img_No_26.png", "10-113_14.47.25_VMC_Img_No_27.png", "10-113_14.48.08_VMC_Img_No_28.png", "10-113_14.48.52_VMC_Img_No_29.png", "10-113_14.49.36_VMC_Img_No_30.png", "10-113_14.50.20_VMC_Img_No_31.png", "10-113_14.51.04_VMC_Img_No_32.png", "10-113_14.51.48_VMC_Img_No_33.png", "10-113_14.52.32_VMC_Img_No_34.png", "10-113_14.53.16_VMC_Img_No_35.png", "10-113_14.54.00_VMC_Img_No_36.png", "10-113_14.54.44_VMC_Img_No_37.png", "10-113_14.55.28_VMC_Img_No_38.png", "10-113_14.56.12_VMC_Img_No_39.png", "10-113_14.56.56_VMC_Img_No_40.png", "10-113_14.57.39_VMC_Img_No_41.png", "10-113_14.58.22_VMC_Img_No_42.png", "10-113_14.59.07_VMC_Img_No_43.png", "10-113_14.59.51_VMC_Img_No_44.png", "10-113_15.00.35_VMC_Img_No_45.png", "10-113_15.01.19_VMC_Img_No_46.png", "10-113_15.02.03_VMC_Img_No_47.png", "10-113_15.02.46_VMC_Img_No_48.png", "10-113_15.03.31_VMC_Img_No_49.png", "10-113_15.04.14_VMC_Img_No_50.png", "10-113_15.04.59_VMC_Img_No_51.png", "10-113_15.05.42_VMC_Img_No_52.png", "10-113_15.06.27_VMC_Img_No_53.png", "10-113_15.07.10_VMC_Img_No_54.png", "10-113_15.07.54_VMC_Img_No_55.png", } dates = { celestia:utctotdb(2010, 04, 23, 14, 28, 18), celestia:utctotdb(2010, 04, 23, 14, 29, 06), celestia:utctotdb(2010, 04, 23, 14, 29, 50), celestia:utctotdb(2010, 04, 23, 14, 30, 34), celestia:utctotdb(2010, 04, 23, 14, 31, 18), celestia:utctotdb(2010, 04, 23, 14, 32, 02), celestia:utctotdb(2010, 04, 23, 14, 32, 46), celestia:utctotdb(2010, 04, 23, 14, 33, 30), celestia:utctotdb(2010, 04, 23, 14, 34, 14), celestia:utctotdb(2010, 04, 23, 14, 34, 58), celestia:utctotdb(2010, 04, 23, 14, 35, 42), celestia:utctotdb(2010, 04, 23, 14, 36, 26), celestia:utctotdb(2010, 04, 23, 14, 37, 10), celestia:utctotdb(2010, 04, 23, 14, 37, 53), celestia:utctotdb(2010, 04, 23, 14, 38, 37), celestia:utctotdb(2010, 04, 23, 14, 39, 21), celestia:utctotdb(2010, 04, 23, 14, 40, 05), celestia:utctotdb(2010, 04, 23, 14, 40, 49), celestia:utctotdb(2010, 04, 23, 14, 41, 33), celestia:utctotdb(2010, 04, 23, 14, 42, 17), celestia:utctotdb(2010, 04, 23, 14, 43, 01), celestia:utctotdb(2010, 04, 23, 14, 43, 45), celestia:utctotdb(2010, 04, 23, 14, 44, 29), celestia:utctotdb(2010, 04, 23, 14, 45, 13), celestia:utctotdb(2010, 04, 23, 14, 45, 57), celestia:utctotdb(2010, 04, 23, 14, 46, 41), celestia:utctotdb(2010, 04, 23, 14, 47, 25), celestia:utctotdb(2010, 04, 23, 14, 48, 08), celestia:utctotdb(2010, 04, 23, 14, 48, 52), celestia:utctotdb(2010, 04, 23, 14, 49, 36), celestia:utctotdb(2010, 04, 23, 14, 50, 20), celestia:utctotdb(2010, 04, 23, 14, 51, 04), celestia:utctotdb(2010, 04, 23, 14, 51, 48), celestia:utctotdb(2010, 04, 23, 14, 52, 32), celestia:utctotdb(2010, 04, 23, 14, 53, 16), celestia:utctotdb(2010, 04, 23, 14, 54, 00), celestia:utctotdb(2010, 04, 23, 14, 54, 44), celestia:utctotdb(2010, 04, 23, 14, 55, 28), celestia:utctotdb(2010, 04, 23, 14, 56, 12), celestia:utctotdb(2010, 04, 23, 14, 56, 56), celestia:utctotdb(2010, 04, 23, 14, 57, 39), celestia:utctotdb(2010, 04, 23, 14, 58, 22), celestia:utctotdb(2010, 04, 23, 14, 59, 07), celestia:utctotdb(2010, 04, 23, 14, 59, 51), celestia:utctotdb(2010, 04, 23, 15, 00, 35), celestia:utctotdb(2010, 04, 23, 15, 01, 19), celestia:utctotdb(2010, 04, 23, 15, 02, 03), celestia:utctotdb(2010, 04, 23, 15, 02, 46), celestia:utctotdb(2010, 04, 23, 15, 03, 31), celestia:utctotdb(2010, 04, 23, 15, 04, 14), celestia:utctotdb(2010, 04, 23, 15, 04, 59), celestia:utctotdb(2010, 04, 23, 15, 05, 42), celestia:utctotdb(2010, 04, 23, 15, 06, 27), celestia:utctotdb(2010, 04, 23, 15, 07, 10), celestia:utctotdb(2010, 04, 23, 15, 07, 54), } xarr = { -656.975, -681.779, -704.491, -727.179, -749.842, -772.479, -795.089, -817.671, -840.225, -862.749, -885.242, -907.704, -930.134, -952.022, -974.384, -996.712, -1019.004, -1041.258, -1063.474, -1085.651, -1107.789, -1129.885, -1151.938, -1173.949, -1195.916, -1217.837, -1239.712, -1261.044, -1282.824, -1304.555, -1326.235, -1347.863, -1369.438, -1390.960, -1412.426, -1433.836, -1455.188, -1476.481, -1497.714, -1518.887, -1539.517, -1560.087, -1581.547, -1602.463, -1623.312, -1644.092, -1664.801, -1684.971, -1706.004, -1726.030, -1746.910, -1766.786, -1787.506, -1807.227, -1827.326, } zarr = { 9995.963, 9948.493, 9904.623, 9860.413, 9815.862, 9770.97, 9725.74, 9680.169, 9634.26, 9588.011, 9541.424, 9494.498, 9447.235, 9400.719, 9352.787, 9304.519, 9255.913, 9206.971, 9157.692, 9108.077, 9058.126, 9007.839, 8957.217, 8906.259, 8854.967, 8803.34, 8751.379, 8700.276, 8647.654, 8594.699, 8541.41, 8487.788, 8433.834, 8379.547, 8324.928, 8269.977, 8214.694, 8159.079, 8103.134, 8046.857, 7991.541, 7935.908, 7877.351, 7819.762, 7761.843, 7703.595, 7645.019, 7587.456, 7526.88, 7468.677, 7407.431, 7348.588, 7286.674, 7227.192, 7166.005, } yarr = { -8961.556, -8986.961, -9009.927, -9032.583, -9054.928, -9076.958, -9098.672, -9120.069, -9141.146, -9161.902, -9182.334, -9202.440, -9222.218, -9241.228, -9260.352, -9279.142, -9297.595, -9315.711, -9333.485, -9350.917, -9368.004, -9384.744, -9401.133, -9417.172, -9432.855, -9448.182, -9463.151, -9477.429, -9491.681, -9505.565, -9519.082, -9532.226, -9544.997, -9557.392, -9569.407, -9581.040, -9592.290, -9603.151, -9613.623, -9623.703, -9633.171, -9642.259, -9651.359, -9659.848, -9667.930, -9675.603, -9682.862, -9689.554, -9696.128, -9701.998, -9707.705, -9712.740, -9717.567, -9721.753, -9725.604, } obsno = 55 obstring = "23 April 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