[已答复] 请教一个矢量场的旋转问题

[复制链接]
cher 发表于 2021-9-30 10:40:49
本帖最后由 cher 于 2021-9-30 10:41 编辑

请教矢量场旋转的数学理论,想把一个场进行一定角度的旋转应该怎么考虑旋转矩阵?在已知各点矢量大小的情况下,比如:N=20;
x=linspace(-25,25,N);
y=linspace(-25,25,N);

for i=1:length(y)
    for j=1:length(x)
        Fx(i,j)=200*x(j)+exp(-(y(i)/5)^2);
        Fy(i,j)=0;
    end
end
quiver(x,y,Fx,Fy,'color','r');

untitled.jpg
想使该场按照固定角度旋转45°,或者90°。如果按照旋转矩阵[cos(ang), sin(ang); -sin(ang), cos(ang)]仅仅是原始矢量固定旋转。如下图所示。
untitled.jpg
请教版友指点一下基本理论和方法。

1 条回复


15631202458 发表于 2021-10-8 09:28:03
  1. N=20;
  2. x=linspace(-25,25,N);
  3. y=linspace(-25,25,N);

  4. for i=1:length(y)
  5.     for j=1:length(x)
  6.         Fx(i,j)=200*x(j)+exp(-(y(i)/5)^2);
  7.         Fy(i,j)=0;
  8.     end
  9. end
  10. quiver(x,y,Fx,Fy,'color','r');


  11. %设置旋转角度
  12. dang=35;

  13. %%方案一:根据虚数原理先求向量的角度,旋转通过加减角度后反算虚数
  14. complexA=[Fx+Fy*1i];
  15. absA=abs(complexA);
  16. thetaA = angle(complexA);
  17. newthetaA=thetaA+deg2rad(dang);   %逆时针旋转是+,顺时针旋转是-;

  18. hold on
  19. quiver(x,y,absA.*cos(newthetaA),absA.*sin(newthetaA),'color','g');

  20. %%方案二,利用旋转矩阵
  21. dang=70;
  22. ang=deg2rad(dang);
  23. rotateA=[cos(ang), sin(ang); -sin(ang), cos(ang)];
  24. for i=1:length(y)
  25.     for j=1:length(x)
  26.         temp=[Fx(i,j),Fy(i,j)]*rotateA
  27.         Fxnew(i,j)=temp(1);
  28.         Fynew(i,j)=temp(2);
  29.     end
  30. end
  31. quiver(x,y,Fxnew,Fynew,'color','b');
  32. axis equal
复制代码
untitled.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表