【问题标题】:matlab - find nearby points of a lot of objectsmatlab - 找到很多物体的附近点
【发布时间】:2020-05-18 02:40:21
【问题描述】:

我有许多对象,每个对象都有自己的点之间的三个距离矩阵 (x1-x1,x1-x2,x1-x3...;x2-x1,x2-x2,x3-x2...)也有 y 和 z。

假设旋转不是问题,我想找到尽可能多的附近点。

我尝试了一些东西。由于 Matlab 应该可以轻松处理矩阵,我确信有些东西很麻烦,但我不知道如何解决它。 对于每个对象及其镜像,以及每个轴上的每个平移,都有一个 xyz 场景: (x1,y1,z1;x2,y2,z2;...) 所以我正在翻译和镜像一个对象一百万次。

for m=1:object1
for n=1:object2
 for i=1:NumRows
 for j=1:NumRows2
  d_x(m,n,i,j)=obj(m).xyz(i,1)-obj(n).xyz(j,1);
  d_y(m,n,i,j)=obj(m).xyz(i,2)-obj(n).xyz(j,2);
  d_z(m,n,i,j)=obj(m).xyz(i,3)-obj(n).xyz(j,3);
  d_r(m,n,i,j)=sqrt(d_x(m,n,i,j)*d_x(m,n,i,j)+d_y(m,n,i,j)*d_y(m,n,i,j)+d_z(m,n,i,j)*d_z(m,n,i,j));
  if d_r(m,n,i,j)>=0 & d_r(m,n,i,j)<1.2
   d_r(m,n,i,j)=1.2-d_r(m,n,i,j);
  else
   d_r(m,n,i,j)=0;
  end
  sy(m,n)=sy(m,n)+d_r(m,n,i,j);
 end
 end
end
end

【问题讨论】:

    标签: matlab euclidean-distance


    【解决方案1】:

    每当您开始将索引放入变量名称时,请三思而后行,它们是否应该是单个变量。这里我们有d_xd_yd_z。我的建议是用一个变量替换它们:

    d_xyz(m,n,i,j,:)=obj(m).xyz(i,:)-obj(n).xyz(j,:);
    

    现在到您的下一行,您在那里计算的实际上称为 2 范数。如果你知道名字,就很容易缩短:

    d_r(m,n,i,j) = norm(squeeze(d_xyz(m,n,i,j,:)),2);
    

    【讨论】:

    • 我没有得到建议的第二行。我用d_r(m,n,i,j)=sqrt(d_xyz(m,n,i,j,1)*d_xyz(m,n,i,j,1)+d_xyz(m,n,i,j,2)*d_xyz(m,n,i,j,2)+d_xyz(m,n,i,j,3)*d_xyz(m,n,i,j,3));
    • 你在那里所做的,对每个数字求平方并取和的根,正是 2 范数的定义。它也被称为欧几里得距离。 en.m.wikipedia.org/wiki/Norm_(mathematics)
    • 我收到Error using norm Input must be 2-D.
    • 理解你的评论错误,以为你不理解背后的数学。我实际上忘记了压缩代码。 norm 不适用于大小为 [1,1,1,1,3] 的输入,这里它需要一个 [3,1] 向量。更新了我的答案。
    • 我确实知道这部分数学,但我不会编程。我会做一些小程序,有时我会尝试改进它们。
    猜你喜欢
    • 2017-03-13
    • 2013-03-13
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2020-09-22
    • 2022-12-09
    相关资源
    最近更新 更多