How to replace the 'erasemode' with 'animatedline'?
Show older comments
I'm trying to modle a six springs system and I've found a similar code with erasemode which can no loger be used. I've tried to mode the oscillations precess with new functions, but I've failed to make it to work. Could you please help me use new functions to show the motion of the rings in the large ring.

this is the sub function that show the place of the ring and springs:
function [xp,yp]=plotstring(xa,ya,xb,yb,r)
[xa1,ya1]=cart2pol(xa,ya);
xa1=xa1+0.1;
[xa,ya]=pol2cart(xa1,ya1);
[xb1,yb1]=cart2pol(xb,yb);
xb1=xb1+0.1;
[xb,yb]=pol2cart(xb1,yb1);
a=0.13;n=5;
q2=[];
d=sqrt((xa-xb)^2+(ya-yb)^2);
w=2*pi*n/d;
x=xa:0.02:(xa+d);
y=a*sin(w*(x-xa));
if xa>xb
q1=pi+atan((ya-yb)/(xa-xb));
else
q1=atan((ya-yb)/(xa-xb));
end
xd=xa+(x-xa)*cos(q1);
yd=ya+(x-xa)*sin(q1);
for i=1:length(y)
if xd(i)<0
q2a=pi+atan((yd(i))/xd(i));
q2=[q2 q2a];
else
q2a=atan((yd(i))/xd(i));
q2=[q2 q2a];
end
end
xp=(r+y).*cos(q2);
yp=(r+y).*sin(q2);
this is the main function:
function bh
m=1;k=50;
%计算本征值与本征频率
S=m/k*diag(ones(1,6));
P=2*diag(ones(1,6))-diag(ones(1,5),-1)-diag(ones(1,5),+1);
P(1,6)=-1;P(6,1)=-1;
[JM,JBB]=eig(S\P);
JB=abs(sqrt(JBB));
%给定位移表达式中各项的系数
a1=[0.2,0,0,0,0,0,1];
a2=[0,0.2,0,0,0,0,1];
a3=[0,0,0.2,0,0,0,1];
a4=[0,0,0,0.2,0,0,1];
a5=[0,0,0,0,0.2,0,1];
a6=[0,0,0,0,0,0.2,1];
%设初相
phi1=0;phi2=0;phi3=0;
phi4=0;phi5=0;phi6=0;
t=0:0.01:4;%设运动时间
r=1;%圆环半径
figure
axis([-1.5*r 1.5*r -1.5*r 1.5*r]);
hold on
the1=0:2*pi/3600:2*pi;
plot (r*cos(the1),r*sin(the1),'r')
axis equal
for kk=1:7
if kk==7 %加文字标注
title('一般模式')
else ti1='简正模\cdot\cdot\cdot';ti2=int2str(kk);
ti=[ti1,ti2];
title(ti);
end
for i=1:6
ss=a1(kk)*JM(i,1)*cos(JB(1,1)*t+phi1)+a2(kk)*JM(i,2)*cos(JB(2,2))+a3(kk)*JM(i,3)*cos(JB(3,3))+a4(kk)*JM(i,4)*cos(JB(4,4))+a5(kk)*JM(i,5)*cos(JB(5,5))+a6(kk)*JM(i,6)*cos(JB(6,6));
x{i}=r*cos((i)*pi/3-ss/r);
y{i}=r*sin((i)*pi/3-ss/r);
end
for i=1:5
[xp,yp]=plotstring(x{i}(1),y{i}(1),x{i+1}(1),y{i+1}(1),r);
h{i}=plot(xp,yp,'erasemode','xor','linewidth',1.5);%画弹簧
hh{i}=plot(x{i}(1),y{i}(1),'erasemode','xor','marker','o','markersize',25,'linewidth',2.5,'color','r');
ii=7-i;
hhh{i}=text(x{6}(1)-0.08,y{i}(1)+0.01,int2str(ii),'fontsize',14,'erasemode','xor');
end
Accepted Answer
More Answers (0)
Categories
Find more on Graphics Performance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!