Algorithm 如何过滤以某种方式移动的一组二维点
我有一个在二维(x轴和y轴)中移动的点列表,表示为数组中的行。我可能有N个点,即N行:Algorithm 如何过滤以某种方式移动的一组二维点,algorithm,matlab,geometry,physics,computational-geometry,Algorithm,Matlab,Geometry,Physics,Computational Geometry,我有一个在二维(x轴和y轴)中移动的点列表,表示为数组中的行。我可能有N个点,即N行: 其中Ti、席和Yi是时间点、X坐标和I点的Y坐标。时间索引ti是从1到T的整数。每个这样的可能时间索引的点数可以从0到N不等(仍然总共只有N个点) 我的目标是过滤掉所有不以某种方式移动的点;或者只保留那些做的。一个点必须沿抛物线轨迹移动——x坐标和y坐标减小(即,仅向左和向下移动)。必须删除具有其他动态行为的点 我可以在这个数组上使用一个简单的排序机制,然后分析时间索引的顺序吗?我还考虑到,具有相同时间索引t
其中Ti、席和Yi是时间点、X坐标和I点的Y坐标。时间索引ti是从1到T的整数。每个这样的可能时间索引的点数可以从0到N不等(仍然总共只有N个点)
我的目标是过滤掉所有不以某种方式移动的点;或者只保留那些做的。一个点必须沿抛物线轨迹移动——x坐标和y坐标减小(即,仅向左和向下移动)。必须删除具有其他动态行为的点 我可以在这个数组上使用一个简单的排序机制,然后分析时间索引的顺序吗?我还考虑到,具有相同时间索引ti的每个点都是物理上不同的点,因此应该与其他点配对。问题越来越复杂,现在我来谈谈你 注意:您可以假设这些点被限制在两条抛物线之间(x,y)-平面的子区域内。这些曲线仅在一个点相交:任何点靠近运动原点的点 更多信息:% 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
我已经提供了一些数据文件:
% 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
数据文件包含一个包含176行和5列的uint32数组。各栏分别为:
% 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
谢谢:)以(索引、时间)为键对数据进行排序,对于一个点的所有位置,我看它们是否遵循抛物线轨迹
你面临的问题是什么?分类应该很容易。嗯,这是第二部分(测试一组点是否遵循抛物线轨迹)很困难。为什么,看起来就像你在模拟雷达跟踪两枚导弹碰撞后的碎片 无论如何,让我们创造一个新的术语:对象。物体沿着抛物线运动,在某些时候,它们可能会发出闪光,以点的形式出现。我们还试图过滤掉其他一些要点 我们需要更多信息:
你能发布一些样本数据吗?你的数据在时间上是如何变化的?如果一个点是一行,它是否只有一个
x
和一个y
?你有更多的专栏还是第三维度?或者它实际上是一个单元数组,每个t\u i
,x\u i
,y\u i
都是向量?@yuk我的数据在MATLAB中是一个普通的2d数组。栏目如问题中所述。数组是uint32,每个值都是点的像素空间索引,时间如所述(从1到T的整数)。感谢您的回答。实际上,这些物体只是在实验室规模的分拣机中移动的种子(谷物)。我正在分析机器分离两种种子的能力()。答案是:1:是(目前只引入重力,不引入阻力);2:没有;3:没有一般规律;4:抛物线轨迹是一个假设——希望是一个有用的假设。我发现这种假设不太可能导致任何极端错误/异常值(如果有)。你是对的-排序当然不是问题。这确实是第二部分。我想如果人们能设计一种算法,在一个数字列表中,能找到最小大小为2的排序子集,那将会很有用。但是我自己没有时间。