Matlab 从2个向量开始的坐标
全部, 假设我有两个向量U和V,分别有2个单位和1个单位的长度,如草图所示。向量U旋转角度θ 至少存在两种可能的情况,即矢量U可以“向上”或“向下”,如草图所示 我的问题是,有了上述数据集,是否有可能有一个通用公式,可以转换到Matlab中,以获得点M的坐标 向量U和V的长度以及角度θ是任意的Matlab 从2个向量开始的坐标,matlab,vector,geometry,Matlab,Vector,Geometry,全部, 假设我有两个向量U和V,分别有2个单位和1个单位的长度,如草图所示。向量U旋转角度θ 至少存在两种可能的情况,即矢量U可以“向上”或“向下”,如草图所示 我的问题是,有了上述数据集,是否有可能有一个通用公式,可以转换到Matlab中,以获得点M的坐标 向量U和V的长度以及角度θ是任意的 谢谢大家! 您可以利用Uinit和Urot的叉积特性。产品的符号将通知您结果向量的方向 假设原点是O(0,0),初始向量是Uinit(x1,y1),最终向量是Urot(x2,y2)。而且M(x,y)可以
谢谢大家! 您可以利用
Uinit
和Urot
的叉积特性。产品的符号将通知您结果向量的方向
假设原点是O(0,0)
,初始向量是Uinit(x1,y1)
,最终向量是Urot(x2,y2)
。而且M(x,y)
可以很容易地计算出来
如果要过滤旋转向量Urot
,与三角形的上一个方向相比,其结果为“高于”或“低于”M
,可以采用以下叉积:
M cross-Uinit
和M cross-Urot
。
如果它们的符号相同,则得到的旋转向量不会穿过OM线,如果符号不同,则相反。我们知道这一点
M=sqrt(U^2+V^2)
M和U之间的角度为
阿尔法=弧坦(V/U)
那么你知道M的x坐标和y坐标是:
“向上”案例:
M=(sqrt(U^2+V^2)*cos(θ+符号cosd(θ))*arctan(V/U)),sqrt(U^2+V^2)*sin(θ+符号cosd(θ))*arctan(V/U)))
“下跌”案例:
M=(sqrt(U^2+V^2)*cos(θ符号cosd(θ))*arctan(V/U)),sqrt(U^2+V^2)*sin(θ符号cosd(θ))*arctan(V/U)))
第二种计算方法是将x和y方向上的
U
和V
长度相加,然后求和
U的坐标为:
(Ucos(θ),Usin(θ))
对于该坐标,我们必须加/减V的x和y坐标。V沿x和y的长度为:
(绝对值sin(θ)),绝对值cos(θ))
是否应该从U中添加或删除这些值取决于θ。通常,我们可以将Vup和Vdown写为
Vup=(V*符号(-cos(θ))sin(θ),Vsign(cos(θ))*cos(θ))
Vdown=(V*符号(cos(θ))sin(θ),Vsign(-cos(θ))*cos(θ))
然后,我们可以始终将U添加到Vup和Vdown。最后
Mup=U+Vup
Mdown=U+Vdown
有一个更有效的解决方案
U
的端点坐标由以下公式给出:
(U*cos(θ),U*sin(θ))
对于任何向量(x,y)
,顺时针垂直方向(即第二个图表“向下”)为(y,-x)
,逆时针方向的坐标为负。因此M
的坐标由下式给出:
- 逆时针(“向上”):
(U*cos(θ)-M*sin(θ),U*sin(θ)+M*cos(θ))
- 顺时针(“向下”):
(U*cos(θ)+M*sin(θ),U*sin(θ)-M*cos(θ))
无需调用
arctan
或sqrt
,这两种方法都非常昂贵。此外,您还可以只计算一次sin/cos
,并将结果用于两个组件。这只是另一个紧凑的解决方案
theta = 30;
L = 2; % norm of U vector
U = L*[cosd(theta) ; sind(theta)];
Vup = [-U(2) ; U(1)] / L; % Normal vectors, unit length
Vdown = [U(2) ; -U(1)] / L;
Mup = U + Vup; % Two possible values of M
Mdown = U + Vdown;
% Bonus plot
figure
plot([0 U(1)] , [0 U(2)] , 'k-')
hold on; axis equal;
plot([0 Vup(1)]+U(1) , [0 Vup(2)]+U(2) , 'r-')
plot([0 Vdown(1)]+U(1) , [0 Vdown(2)]+U(2) , 'r-')
text(Mup(1),Mup(2),'M_u_p')
text(Mdown(1),Mdown(2),'M_d_o_w_n')
手工算出三角学,然后你会得到一个公式,你可以很容易地将其转换到MATLAB中。为了澄清这一点,你需要给定向量
U
(已知长度)的方位角theta
及其法向量V
(已知长度)的M(x,y)
的坐标?你好@亚里士多德,是的,这是正确的。我下面有正确的答案,现在想知道更多。请参阅我对下面接受的答案的附加评论。@BeeTiau看一下我下面编辑的答案。要自动化这个过程,因为我有数千个点,过滤向量V“向上”或“向下”的最佳标准是什么?过滤向量V的逻辑是什么?谢谢@ViG,感谢你的帮助。为了自动化这个过程,因为我有数千个点,过滤“上升”或“下降”的点的最佳标准是什么?在第二种方法中,Vdown的Y坐标始终为负。你确定这是正确的行为吗?@meowgoesthedog我解释说在“down”情况下My
,所以这确实是我期望的行为。@BeeTiau你是说在哪种情况下使用up还是down?我想这取决于你想要的行为。可能(如果可能的话)你可以给出一个输入和一个期望的输出吗?ps我在回答中也做了一个编辑。我想你可能被图表中的具体情况误导了,并且使用了“向下”一词而不是更准确的“顺时针”。在My
上没有这样的限制。试一下第二象限中的一些向量U——“向下”向量将指向上。这个例程假设V是从U计算出来的。在原来的问题中,U和V的长度是已知的。或者我遗漏了什么?@BeeTiau,我不确定,我同意“假设我有两个向量U和V,两个单位,一个单位长度”如果给定V,问题就更容易了,我想…M=U+V
。也许我遗漏了什么。