matlab - 找到很多物体的附近点
matlab - find nearby points of a lot of objects
我有许多对象,每个对象在自己的点之间具有三个距离矩阵 (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
每当您开始将索引放在变量名中时,请三思是否它们应该是单个变量。这里我们有 d_x
d_y
d_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);
我有许多对象,每个对象在自己的点之间具有三个距离矩阵 (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
每当您开始将索引放在变量名中时,请三思是否它们应该是单个变量。这里我们有 d_x
d_y
d_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);