n个向量之间的角度 - Matlab

jar*_*ead 1 matlab matrix

考虑一组点(仅举例)

x = [0 1 2 5 4 8 5 6];
y = [5 8 4 2 5 6 4 5];
Run Code Online (Sandbox Code Playgroud)

和另一个参考点:

xc=1;
yc=1;
Run Code Online (Sandbox Code Playgroud)

我用它来表示这些点作为向量:

vec=[x-xc y-yc];
Run Code Online (Sandbox Code Playgroud)

我希望得到一个矩阵,其中包含通过计算得到的所有矢量之间的所有角度(对于单个矢量)

angle = acosd(dot(v,u)/norm(u)*norm(v));
Run Code Online (Sandbox Code Playgroud)

如何在几行中获得此计算而无需在循环中按矢量向量?在我的计算中,点数非常大.

ViG*_*ViG 6

我想你的意思是vec = [x-xc; y-yc];.要在所有行之间使用dotproduct,您可以使用

vec.'*vec
Run Code Online (Sandbox Code Playgroud)

每个向量的范数(欧几里得)可以确定为

no = sqrt(sum(vec.*vec,1))
Run Code Online (Sandbox Code Playgroud)

不同规范的乘积可以计算如下vec:

no.'*no
Run Code Online (Sandbox Code Playgroud)

因此可以找到角度

no = sqrt(sum(vec.*vec,1));
angles = acosd(vec.'*vec./(no.'*no));
Run Code Online (Sandbox Code Playgroud)