Matlab 从2个向量开始的坐标

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)可以

全部,

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

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

我的问题是,有了上述数据集,是否有可能有一个通用公式,可以转换到Matlab中,以获得点M的坐标

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


谢谢大家!

您可以利用
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
。也许我遗漏了什么。