从2个矢量坐标

时间:2018-02-28 13:12:48

标签: matlab vector geometry

所有

假设我有两个矢量U和V,分别为2个单位和1个单位长度,如草图所示。矢量U旋转了角度θ。

至少有两种可能的情况,即矢量U可以“向上”或“向下”,如草图所示。

我的问题是,拥有上述数据集是否可以将一个通用公式转换为Matlab以获得M点的坐标?

矢量U和V的长度以及角度θ是任意的。

enter image description here

谢谢!

4 个答案:

答案 0 :(得分:2)

有一种更有效的解决方案。

U端点的坐标由下式给出:

(U * cos(theta), U * sin(theta))

对于任何向量(x, y)顺时针垂直方向(即第二个图“向下”)是(y, -x),而逆时针方向方向是减去这些。因此M的坐标由下式给出:

  • 逆时针(“向上”):(U * cos(theta) - M * sin(theta), U * sin(theta) + M * cos(theta))

  • 顺时针(“向下”):(U * cos(theta) + M * sin(theta), U * sin(theta) - M * cos(theta))

无需拨打arctansqrt这些费用非常高昂。您也可以只计算一次sin/cos并将结果用于两个组件。

答案 1 :(得分:1)

来自Pythogoras我们知道

  

M = sqrt(U ^ 2 + V ^ 2)

M和U之间的角度是

  

alpha = arctan(V / U)

那么你就知道M的x坐标和y坐标是:

“up”案例:

  

M =(sqrt(U ^ 2 + V ^ 2)* cos(theta + sign(cosd(theta))* arctan(V / U)),sqrt(U ^ 2 + V ^ 2)* sin( theta + sign(cosd(theta))* arctan(V / U)))

“向下”案件:

  

M =(sqrt(U ^ 2 + V ^ 2)* cos(theta - sign(cosd(theta))* arctan(V / U)),sqrt(U ^ 2 + V ^ 2)* sin( theta - sign(cosd(theta))* arctan(V / U)))

另一种计算方法是在x和y方向上添加UV的长度,并将它们相加。

U的坐标为:

  

(U cos(theta),U sin(theta))

对于这个坐标,我们必须加上/减去V的x和y坐标。沿x和y的V长度为:

  

(abs(sin(theta)),abs(cos(theta))

是否应该从U中添加或减去这些取决于theta。一般来说,我们可以将Vup和Vdown写为

  

Vup =(V * sign(-cos(theta)) sin(theta),V 符号(cos(theta))* cos(theta))

     

Vdown =(V * sign(cos(theta)) sin(theta),V 符号(-cos(theta))* cos(theta))

然后我们总是可以将U添加到Vup和Vdown。最后

  

Mup = U + Vup

     

Mdown = U + Vdown

答案 2 :(得分:1)

只是另一个紧凑的解决方案

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')

enter image description here

答案 3 :(得分:-1)

您可以利用UinitUrot的叉积的属性。产品的标志将告知您生成的矢量的方向。

假设原点为O(0,0),您的初始向量为Uinit(x1,y1),最终向量为Urot(x2,y2)。此外,M(x,y)也可轻松计算。

如果要过滤最终在'上方'或'下方'Urot上方的旋转矢量M与三角形的上一个方向相比较,您可以采用以下交叉产品: M cross UinitM cross Urot。 如果它们的符号相同,那么得到的旋转矢量不会越过OM线,如果符号不同则相反。