作业帮 > 数学 > 作业

如何使用Matlab让一特定线段绕它的一端点旋转,使另一端点从一特定位置至另一特定位置?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/27 21:31:02
如何使用Matlab让一特定线段绕它的一端点旋转,使另一端点从一特定位置至另一特定位置?
x=[-7.806 -22.813]
y=[23.75 23.75]
z=[0 -50]
plot3(x,y,z,'k','LineWidth',2)
hold on
以[-7.806,23.75,0]为圆心旋转,使另一端点从,[-22.813,23.75,-50]移动到[-60,23.75,0],再移动回去?
要看的时候是一个动态过程!
p0=[-7.806,23.75,0]; %定点
p1=[-22.813,23.75,-50]; %动点第一位置
p2=[-60,23.75,0]; %动点第二位置
v1=p1-p0;l1=sqrt(sum(v1.^2)); %第一位置线段矢量,及其长度
v2=p2-p0;l2=sqrt(sum(v2.^2)); %第二位置线段矢量,及其长度
n=cross(v1/l1,v2/l2); %从第一位置,到第二位置旋转的单位法向量
a=acos(dot(v1,v2)/l1/l2); %从第一位置,到第二位置旋转的夹角
N=50; %分50个位置,可以自己改次数
aa=linspace(0,a,N); %50个角度
h=plot3([p0(1) p1(1)],[p0(2) p1(2)],[p0(3) p1(3)],'linewidth',2);
view(3);axis equal;axis([-l1 0 0 l1 -l1 0]);grid on;
for ii=[2:N N-1:-1:1]
vii=v1*cos(aa(ii))+cross(n,v1)*sin(aa(ii)); %计算当前矢量
pii=vii+p0; %计算当前坐标
set(h,'XData',[p0(1) pii(1)],'YData',[p0(2) pii(2)],'ZData',[p0(3) pii(3)]);
pause(0.1);
drawnow;
end