matlab如何把虚线变成实线

functionthbglobalLmkgtheta0=pi/20;%\fs{初始角度,可由读者设不同的值}m=0.05;k=2;g=9.8;L0=1;L=L0+m*g/... function thb
global L m k g
theta0=pi/20; %\fs{初始角度,可由读者设不同的值}
m = 0.05; k = 2 ; g = 9.8;
L0 = 1; L = L0 + m*g/k; %\fs{L0为弹簧原来长度,L为弹簧静止时长度}
[t,u1] = ode45(@thbfun,[0 : 0.005 : 15],[L0 0 theta0 0],[],L,k,m,g);
[y1,x1] = pol2cart(u1(:,3),u1(:,1)); y1 = -y1;%\fs{将极坐标换为直角坐标}
ymax = max(abs(y1));
axis([-1.2 1.2 -1.2*ymax 0.2]);%\fs{设置坐标范围}
axis off
title('弹簧摆','fontsize',14)
hold on;
R =0.055 ; %\fs{设置弹簧半径}
yy = -L0 : 0.01 : 0;
xx = R*sin(yy./L0*30*pi);%\fs{用正弦曲线表示弹簧}
[a,r] = cart2pol(xx,yy); %\fs{用坐标变换来画初始位置的弹簧}
a = a + theta0;
[xx,yy] = pol2cart(a,r);%\fs{弹簧的数据}
line([-1 1],[0 0],'color','r','linewidth',2)%\fs{画横杆,球与弹簧}
ball = line(xx(1),yy(1),'color','r','marker','.',...
'markersize',70,'erasemode','xor');
ball2 = line(xx(1),yy(1),'color',[0.5 0.51 0.6],'linestyle','-',...
'linewidth',1.3,'erasemode','none');
spring = line(xx,yy,'color','r','linewidth',2,'erasemode', 'xor');
pause(0.5)
for i = 1 : length(t) %\fs{画出每一步的弹簧位置}
yy = -u1(i,1) : 0.01 : 0;
xx = R*sin(yy./u1(i,1)*30*pi);
[a,r] = cart2pol(xx,yy);
a = a + u1(i,3);
[xx,yy] = pol2cart(a,r);
set(ball,'XData',x1(i),'YData',y1(i));
set(ball2,'XData',x1(i),'YData',y1(i));
set(spring,'XData',xx,'YData',yy);
drawnow;
end
function F = thbfun(t,u,flag,l,k,m,g)
m=1;k=80;g=9.8
F = [u(2);
u(1)*u(4)^2 + g*cos(u(3)) - k/m*(u(1) - l + m*g/k);
u(4);
-2*u(2)*u(4)/u(1) - g*sin(u(3))/u(1)];

为什么在matlab上运行出来的是虚线,保存出来的图片一片空白,求高手解答,需要怎么改啊
展开
 我来答
tianxiawulang
2012-09-30 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2674万
展开全部
1、虚线变成实线的方法:
把下面这句
set(ball2,'XData',x1(i),'YData',y1(i));
改成
set(ball2,'XData',x1(1:i),'YData',y1(1:i));

2、原因:
程序原来的做法是,每次更新时只画当前点,但erasemode设成none,也就是不擦除,所以你看到窗口里面由历史上每次绘制呈现出轨迹来,而且是由一系列的点构成,看起来像是虚线。当窗口更新时(比如保存图像),那些未擦除的点就会被消掉。现在的修改是把实际的轨迹画出来(线形为实线),保存也没问题了。

解决这个问题不算难,打字倒是花了半天时间,满意就采纳了吧。不在乎虚名,但不喜欢有始无终。
PJJDCCW
2015-06-29 · TA获得超过50.1万个赞
知道顶级答主
回答量:6.9万
采纳率:91%
帮助的人:5075万
展开全部
title('弹簧摆','fontsize',14)
hold on;
R =0.055 ; %\fs{设置弹簧半径}
yy = -L0 : 0.01 : 0;
xx = R*sin(yy./L0*30*pi);%\fs{用正弦曲线表示弹簧}
[a,r] = cart2pol(xx,yy); %\fs{用坐标变换来画初始位置的弹簧}
a = a + theta0;
[xx,yy] = pol2cart(a,r);%\fs{弹簧的数据}
line([-1 1],[0 0],'color','r','linewidth',2)%\fs{画横杆,球与弹簧}
ball = line(xx(1),yy(1),'color','r','marker','.',...
'markersize',70,'erasemode','xor');
ball2 = line(xx(1),yy(1),'color',[0.5 0.51 0.6],'linestyle','-',...
'linewidth',1.3,'erasemode','none');
spring = line(xx,yy,'color','r','linewidth',2,'erasemode', 'xor');
pause(0.5)
for i = 1 : length(t) %\fs{画出每一步的弹簧位置}
yy = -u1(i,1) : 0.01 : 0;
xx = R*sin(yy./u1(i,1)*30*pi);
[a,r] = cart2pol(xx,yy);
a = a + u1(i,3);
[xx,yy] = pol2cart(a,r);
set(ball,'XData',x1(i),'YData',y1(i));
set(ball2,'XData',x1(i),'YData',y1(i));
set(spring,'XData',xx,'YData',yy);
drawnow;
end
function F = thbfun(t,u,flag,l,k,m,g)
m=1;k=80;g=9.8
F = [u(2);
u(1)*u(4)^2 + g*cos(u(3)) - k/m*(u(1) - l + m*g/k);
u(4);
-2*u(2)*u(4)/u(1) - g*sin(u(3))/u(1)];

1、虚线变成实线的方法:
把下面这句
set(ball2,'XData',x1(i),'YData',y1(i));
改成
set(ball2,'XData',x1(1:i),'YData',y1(1:i));

2、原因:
程序原来的做法是,每次更新时只画当前点,但erasemode设成none,也就是不擦除,所以你看到窗口里面由历史上每次绘制呈现出轨迹来,而且是由一系列的点构成,看起来像是虚线。当窗口更新时(比如保存图像),那些未擦除的点就会被消掉。现在的修改是把实际的轨迹画出来(线形为实线),保存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式