在 2D 空间中旋转弹簧

问题描述

我有一个可以沿 X 轴移动的弹簧的 nice implementation

绘图(N - 弹簧圈数):

t=0:0.01:20;
alpha=0:0.01:2*pi;
N=10;
h=4;
R=0.25;
for i=1:N
    Xpr(i)=(i-1)*1/(N-1);
    if i==1
        Ypr(i)=2.5*R+h;
    elseif i==N
        Ypr(i)=2.5*R+h;
    else
        Ypr(i)=2.5*R+h/2+h/4*(-1)^i;
    end
end
Spring=plot(Xpr*2,Ypr);

动画:

t=0:0.01:20;
alpha=0:0.01:2*pi;
x0=1;
x=x0+0.3*cos(alpha);
for i=1:length(t)  
    set(Spring,'Xdata',Xpr*x(i));  
    pause(0.01);
end

我需要在飞机上顺时针旋转这个弹簧。一端固定。怎么做?

尝试了很多方法。他们都没有工作。动画实现的想法是使用旋转矩阵。像这样:

function L = Rot2D (Vers,phi)
    L(1,:) = Vers(1,:)*cos(phi)-Vers(2,:)*sin(phi)
    L(2,:)*sin(phi)+Vers(2,:)*cos(phi)
endfunction

然后将弹簧的每个线圈打包成一个向量:

N=10;
h=4;
R=0.25;    
for i=1:N
    Xpr(i)=(i-1)*1/(N-1);
    if i==1
        Ypr(i)=2.5*R+h;
        SpringVector=[Xpr(i);Ypr(i)];
    elseif i==N
        Ypr(i)=2.5*R+h;
        newElem=[Xpr(i);Ypr(i)];
        SpringVector=[SpringVector; newElem];
    else
        Ypr(i)=2.5*R+h/2+h/4*(-1)^i;
        newElem=[Xpr(i);Ypr(i)];
        SpringVector=[SpringVector; newElem];
    end
end

在那次调用之后,Rot2D 什么也没显示

y0=1;
y=y0+cos(alpha);
N=10;    
for i=1:N
    phi=-acos(y(i)-1);
    RotArrSpring=Rot2D(SpringVector,phi);
    set(Spring,'XData',RotArrSpring(1,:)*x(i),'YData',RotArrSpring(2,:)*y(i));
    pause(0.01);
end

如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)