考虑一组点(仅作为示例)
x = [0 1 2 5 4 8 5 6];
y = [5 8 4 2 5 6 4 5];
和另一个参考点:
xc=1;
yc=1;
我用它来表示这些点作为向量:
vec=[x-xc y-yc];
我希望获得一个矩阵,其中包含通过计算得到的所有向量之间的所有角度(对于单个向量)
angle = acosd(dot(v,u)/norm(u)*norm(v));
如何在几行中获得此计算而不在循环中按矢量向量?在我的计算中,积分的数量非常大。
答案 0 :(得分:6)
我认为你的意思是vec = [x-xc; y-yc];
。要在所有行之间使用dotproduct,您可以使用
vec.'*vec
每个载体的范数(欧几里得)可以确定为
no = sqrt(sum(vec.*vec,1))
不同规范的乘积可以与vec
:
no.'*no
因此可以找到角度
no = sqrt(sum(vec.*vec,1));
angles = acosd(vec.'*vec./(no.'*no));