Как отфильтровать набор 2D точек, движущихся определенным образом - PullRequest
1 голос
/ 23 марта 2012

У меня есть список точек, перемещающихся в двух измерениях ( x - и y -ось), представленных в виде строк в массиве. У меня может быть N баллов - т.е. N строк:

1 t1 x1 y1
2 t2 x2 y2
. 
.
.
N tN xN yN

где ti , xi и yi , это временной индекс, координата x и координата y для точки i. Индекс времени ti является целым числом от 1 до T . Количество точек в каждом таком возможном временном индексе может варьироваться от 0 до N (по-прежнему всего N баллов).

Моя цель - отфильтровать все точки, которые не движутся определенным образом; или оставить только те, которые делают. Точка должна двигаться по параболической траектории - с уменьшающейся x - и y -координатой (то есть, перемещаясь влево и вниз только). Точки с другим динамическим поведением должны быть удалены.

Могу ли я использовать простой механизм сортировки для этого массива, а затем проанализировать порядок индекса времени? Я также учел тот факт, что каждая точка, имеющая один и тот же временной индекс ti , является физически отличными точками, и поэтому должна сочетаться с другими точками. Сложность проблемы возросла - и теперь я перехожу к вам.

ПРИМЕЧАНИЕ. Можно предположить, что точки ограничены подобластью плоскости (x, y) между двумя параболическими кривыми. Эти кривые пересекаются только в одной точке: точке, близкой к началу движения для любой точки.

Дополнительная информация :

Я сделал доступными некоторые файлы данных:

Необходимый контекст :

Файл данных содержит один массив uint32 с 176 строками и 5 столбцами. Столбцы:

  1. пиксельная x-координата в решетке 175 на 175
  2. пиксельная y-координата в решетке 175 на 175
  3. дискретный тета-индекс угла
  4. индекс времени (от 1 до T = 10)
  5. индекс строки для этой оригинальной сортировки

Точки «живут» в пиксельной решетке 175 на 175 - и снова в верхнем квадранте круга с радиусом 175. Точки перемещаются по окружности круга при вращении против часовой стрелки на определенный угол тета с горизонталью, где они выбрасываются в нечто, близкое к параболической орбите. Столбец 3 содержит дискретный индекс в списке с индексами от 1 до 45 от 0 до 90 градусов (таким образом, один индекс охватывает 2 градуса). Первоначально тета-угол выводился исключительно из точек путем установки тривиальных уравнений движения и решения для угла. Это приводит к квазисимметричной квартике, которая может быть решена в близкой форме. Фактический радиус метрики круга равен 0,2 м, и координаты пикселя были преобразованы из координаты пикселя в метрику с помощью простой линейной интерполяции (но мы видим здесь точки в исходном пиксельном пространстве).

Моя проблема в том, что некоторые точки не работают должным образом, и, поскольку мне нужно собрать статистику по углу тета, мне нужно удалить точки, которые, безусловно, НЕ движутся в параболической траектории. Эти ошибки ожидаемы и полностью естественны, но все же должны быть отфильтрованы.

Код участка MATLAB :

% load data and setup variables:
load mat_points.mat;
num_r = 175;
num_T = 10;
num_gridN = 20;

% begin plotting:
figure(1000);
clf;
plot( ...
   num_r * cos(0:0.1:pi/2), ...
   num_r * sin(0:0.1:pi/2), ...
   'Color', 'k', ...
   'LineWidth', 2 ...
);
axis equal;
xlim([0 num_r]);
ylim([0 num_r]);
hold all;

% setup grid (yea... went crazy with one):
vec_tickValues = linspace(0, num_r, num_gridN);
cell_tickLabels = repmat({''}, size(vec_tickValues));
cell_tickLabels{1} = sprintf('%u', vec_tickValues(1));
cell_tickLabels{end} = sprintf('%u', vec_tickValues(end));
set(gca, 'XTick', vec_tickValues);
set(gca, 'XTickLabel', cell_tickLabels);
set(gca, 'YTick', vec_tickValues);
set(gca, 'YTickLabel', cell_tickLabels);
set(gca, 'GridLineStyle', '-');
grid on;

% plot points per timeindex (with increasing brightness):
vec_grayIndex = linspace(0,0.9,num_T);
for num_kt = 1:num_T
   vec_xCoords = mat_points((mat_points(:,4) == num_kt), 1);
   vec_yCoords = mat_points((mat_points(:,4) == num_kt), 2);
   plot(vec_xCoords, vec_yCoords, 'o', ...
      'MarkerEdgeColor', 'k', ...
      'MarkerFaceColor', vec_grayIndex(num_kt) * ones(1,3) ...
   );
end

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Почему, это выглядит почти так, как будто вы симулируете радиолокационный след от столкновения двух ракет ...

В любом случае, давайте добавим новый термин: объект .Объекты движутся вдоль парабол, и в определенные моменты они могут испускать вспышки, которые выглядят как точек .Есть и другие моменты, которые мы пытаемся отфильтровать.

Нам понадобится дополнительная информация:

  1. Можем ли мы предположить, что объекты подчиняются физике падающих предметов?под действием силы тяжести?
  2. Должен ли каждый объект излучать точку на каждом временном шаге в течение своей жизни?
  3. Говоря о жизни, все объекты начинаются одновременно?Могут ли некоторые истечь раньше других?
  4. Насколько точны данные?Это точно?Есть ли мера ошибки?Иными словами, понимаем ли мы, как плохо точки на объекте могут соответствовать идеальной параболе?
0 голосов
/ 23 марта 2012

Сортировать данные по (индексу, времени) в качестве ключей и по всем точкам точки, которые я вижу, если они следуют параболической траектории?

С какой частью вы столкнулись с проблемой?Сортировка должна быть очень простой.ИМХО, это вторая часть (тестирование, если набор точек следует параболической траектории), которая трудна.

...