selaro 发表于 2009-3-10 22:45

如何不关闭窗口重绘三维图形?

我目前正在做一个动态的三维随机航迹模拟;
预定航迹数k为可变参量;现在的运行结果是:点击运行,打开窗口,画出k个航迹的运动轨迹(一个小点在已知的航迹譬如抛物线中移动,从起始点移动到终点,结束);

但是老板要求:在不关闭窗口的情况下,刷新坐标轴内(即白色部分)的图像,具体举例:第一次,一个k=8的航迹的模拟结束了(进过了一个动态的过程),随机刷新,然后产生一个新的k=3(k为随机)的航迹的模拟过程,以此类推,直到人为关闭的时候该窗口才结束;

请问大概可以使用什么方法和什么函数?同学们有什么好的建议么?谢谢解答!!

================================================================
我把画图整个的程序传上来,请同学们指正!需要的同学也可以拿去参考。
================================================================

下面贴一点画图部分的程序:

h=plot3(pos_a_x,pos_a_y,pos_a_z,'*',pos_b_x,pos_b_y,pos_b_z,'*');
grid on;
axis([-r_max r_max 0 r_max 0 1e3]);
title('炮弹模式下的航迹演示图');
xlabel('X轴');ylabel('Y轴');zlabel('Z轴');
hold on;
figure(1);
………………
………………
set(h,'EraseMode','xor','MarkerSize',10);
………………
………………
set(h,'XData',pos_a_x,'YData',pos_a_y,'ZData',pos_a_z)

hanihaoma 发表于 2009-3-10 23:26

试试 用 input 输入k的值,然后每次k 值 plot 显示在图片中,hold on 即可。

friendchj 发表于 2009-3-11 09:23

修改如红色部分所示:
……
while 1
m1=linspace(0,180,k+1)/180*pi;%把180°分成16份
……
   pause(0.5);
end;
k=input('Please input positive integer k:');
reset(gca);
end

selaro 发表于 2009-3-11 09:58

非常感谢上面两位同学的建议;
我使用了第二位同学的方法,经过测试,发现运行结果是:运行一次航迹后,在command窗口提示:“Please input positive integer k:”, 按照提示输入k的值,就能接着运行第二次程序,以此类推,知道手动关闭窗口结束程序!


不过老板说不要输入k,直接自动刷新;
我现在正在考虑,如何不手动输入k,而通过程序中的某段语句或者函数自动选择k的值,并且赋给要重画的窗口。

selaro 发表于 2009-3-11 10:07

呵呵,我刚才试了一下,其实很简单;
把第二位同学的这段语句中标红的一句改掉:
while 1
m1=linspace(0,180,k+1)/180*pi;%把180°分成16份
……
   pause(0.5);
end;
k=input('Please input positive integer k:');——>改成:k=ceil(rand(1)*8);应该就可以了;
reset(gca);
end

friendchj 发表于 2009-3-11 11:16

回复 5楼 selaro 的帖子

呵呵,原来要随机生成k啊,没注意到。
页: [1]
查看完整版本: 如何不关闭窗口重绘三维图形?