matlab - найти близлежащие точки множества объектов - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть ряд объектов, у каждого из которых есть три матрицы расстояния между собственными точками (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

1 Ответ

1 голос
/ 01 февраля 2020

Всякий раз, когда вы начинаете помещать индексы в имена переменных, дважды подумайте, может ли они быть одной переменной. Здесь у нас есть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...