Hi. I am trying to make an animation of the trajectory (circular orbit of 7000 km altitude) of a satellite orbiting the Earth. The following vectors x,y,z represents the coordinates of it (obtained integrating the acceleration due to the nonspherical gravitational potential) in the reference system.
fh = figure('DoubleBuffer','on'); ah = axes('Parent',fh,'Units','normalized','Position',[0 0 1 1],... 'DataAspectRatio',[1 1 1],'DrawMode','fast'); x = 1.0e+003 * [ 1.293687086462776 1.355010603320554 ... 1.416226136451621 1.477328806662750 1.538313743926646... 1.841302933101510 2.140623861743577 2.435680048370655... 2.725883985836056 3.830393161542639 4.812047393962632... 5.639553477924236 6.285935904692739 6.778445814703028... 6.981534839226300 6.886918327688911 6.496619397538814... 5.886899070860056 5.061708852126299 4.051251943168882... 2.891621923700204 1.551975259009857 0.148687346809817... -1.259946709379085 -2.614876359324573 -3.789635985368149... -4.822735075152957 -5.675398819678173 -6.314344260262741... -6.725008970265510 -6.860046738669579 -6.714044347581475... -6.291232549137548 -5.646225528669501 -4.790489239458692... -3.756316068441812 -2.581710448683235 -1.257064527234605... 0.118190083177733 1.488198207705392 2.797262268588749... 3.943218990855596 4.943060241667732 5.760107224604901... 6.363435161221018 6.741208871652011 6.844507242544970... 6.669637491855506 6.222229021788314 5.549112743364572... 4.665587166679964 3.605338508383659 2.407805301565781... 1.076891826523990 -0.297413079432155 -1.658804233546807... -2.950960371016551 -4.105336427038419 -5.093651475630134... -5.875676956725480 -6.417825276834068 -6.694317613708315... -6.702354075060146 -6.441476385534835 -5.920328191821120... -5.149356931765655 -4.165756794143557 -3.010476122311884... -1.730623521107957 -0.547981318845428 0.651933236927557... 1.830754553013015 2.950797411065132]; y = 1.0e+003 *[ -6.879416537989226 -6.867600717396513... -6.855237614338527 -6.842328214064634 -6.828873545169439... -6.753459997528374 -6.664593892931937 -6.562452270514113... -6.447238135027323 -5.857768973060929 -5.080802144227667... -4.141502963266585 -3.069449548231363 -1.712593819793112... -0.283073212084787 1.157789207734001 2.547934226666446... 3.733185664633135 4.781256997101091 5.653507474532885... 6.316540958291930 6.760480121739906 6.924451844039825... 6.801366712306432 6.393950562012035 5.763652137956600... 4.918852380803697 3.890903548710424 2.717191733101876... 1.385839187748386 -0.001786735280855 -1.388680800030854... -2.717513794724399 -3.877348086956174 -4.892062889940518... -5.723943344458780 -6.341064412332522 -6.729295147896739... -6.844976271597333 -6.684181367561298 -6.252308741323985... -5.600523241569850 -4.741636145151388 -3.707934368103928... -2.537101251915556 -1.208445066639178 0.169057351189467... 1.539102816836380 2.845512534980855 3.993289528709769... 4.989150886098799 5.795183343929699 6.379362665363127... 6.723976759736427 6.794165677259719 6.586864956951024... 6.108394444576384 5.387403581100790 4.449452017586583... 3.332306147336086 2.080126804848620 0.757432563194591... -0.595089763589023 -1.923045482863719 -3.172486599444496... -4.302442851663575 -5.254127434062967 -5.988250483410006... -6.472859710456819 -6.675113607083117 -6.664054266658221... -6.440275312105615 -6.010308893159839]; z = [ -1.348762314964606 -1.416465504571016 -1.484053975854905... -1.551522350691171 -1.618865254528658 -1.953510294130345... -2.284215283426580 -2.610320163346533 -2.931177500785390... -4.153679292291825 -5.242464339076090 -6.162825517200489... -6.884797354552217 -7.440577139596716 -7.680358197465111... -7.594616346122523 -7.183952381870657 -6.529293328494871... -5.637062917332294 -4.540678277777376 -3.279180600545935... -1.817413221203883 -0.280548741687378 1.268253040429052... 2.764251377698321 4.066975661566477 5.218214283582148... 6.174673504642019 6.899157495671121 7.375688520371054... 7.548875108319217 7.410793523141250 6.965068314483629... 6.271309946313485 5.343254095742233 4.215431448848456... 2.928028129903598 1.469574073877195 -0.048649548535536... -1.563638474934283 -3.013536101911645 -4.285161526803897... -5.397128342069014 -6.308837263463213 -6.985946890567337... -7.415475222950275 -7.542406523585701 -7.363021555333582... -6.884639818710263 -6.158276823110702 -5.199186592259776... -4.043958234344444 -2.736923814690622 -1.283388986878655... 0.219908617803070 1.712828428793243 3.135072606759898... 4.411790351254605 5.510842969067953 6.387336537361380... 7.004133661144990 7.332163450286972 7.366696289243980... 7.105258174916579 6.555393588532904 5.727091807637045... 4.660073989309112 3.399622357708514 1.999243120787114... 0.701744421660999 -0.620073499615723 -1.923270654698332... -3.164705887374677 ]; load('topo.mat','topo','topomap1'); [x1,y1,z1] = sphere(50); x1 = 6678.14*x1; y1 = 6678.14*y1; z1 = 6678.14*z1; props.AmbientStrength = 0.1; props.DiffuseStrength = 1; props.SpecularColorReflectance = .5; props.SpecularExponent = 20; props.SpecularStrength = 1; props.FaceColor= 'texture'; props.EdgeColor = 'none'; props.FaceLighting = 'phong'; props.Cdata = topo; surface(x1,y1,z1,props); light('position',[-1 0 1]); light('position',[-1.5 0.5 -0.5], 'color', [.6 .2 .2]); view(3); handles.p1 = line('parent',ah,'XData',x(1),'YData',y(1),'ZData',... z(1),'Color','red','LineWidth',2); handles.p2 = line('parent',ah,'XData',x(end),'YData',y(end),... 'ZData',z(end),'Marker','o','MarkerSize',6,'MarkerFaceColor','b'); oaxes([0 0 0],'Arrow','extend','AxisLabelLocation','side',... 'Xcolor','green','Ycolor','green','Zcolor','green'); axis vis3d equal; handles.XLim = get(gca,'XLim'); handles.YLim = get(gca,'YLim'); handles.ZLim = get(gca,'ZLim'); set([handles.p1,handles.p2],'Visible','off'); xmin = handles.XLim(1); ymin = handles.YLim(1); zmin = handles.ZLim(1); xmax = handles.XLim(2); ymax = handles.YLim(2); zmax = handles.ZLim(2); set(ah, 'XLim', [xmin xmax],'YLim', [ymin ymax],'Zlim',[zmin zmax]); view(3); handles.hsat = line('parent',ah,'XData',x(1), 'YData',y(1),... 'ZData',z(1),'Marker','o', 'MarkerSize',6,'MarkerFaceColor','b'); k = uint8(2); u2 = uint8(length(x)); while k<=u2 handles.htray(k) = line([x(k-1) x(k)],[y(k-1) y(k)],[z(k-1) z(k)],... 'Color','red','LineWidth',3); set(handles.hsat,'XData',x(k),'YData',y(k),'ZData',z(k)); drawnow; k = k + 1; end
where oaxes is a FEX application that allows getting an axes located (in this case) at the origin (0,0,0) of the PlotBox.
I have read the User Guide's Graphics section in the Matlab Help Browser. It recommends to use low-level functions for speeding the graphics output (this is the reason for which I use the line function instead of plot3) and the renderer painters for line graphics. In my case, I can not use it because I have a surface (the Earth) which is not well drawn by it. I want to get something similar to this (I have tried to get in touch with the author but I have not got response). The final result is a slow (it takes 11.4 seconds in my computer with microprocessor intel core i5) and discontinuous animation (perhaps I need more points to get the blue point's movement looks like continuous but the integrator's output points are invariable). I would like to know what I should make to improve it. Thank you for your attention. Cheers.
Best Answer