我正在编写一个程序,需要删除存储在矩阵中的重复点。问题是,当检查这些点是否在矩阵中时,MATLAB无法识别它们是否存在(尽管它们存在)。
在以下代码中,intersections
函数获取交点:
[points(:,1), points(:,2)] = intersections(...
obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ...
[vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]);
结果:
>> points
points =
12.0000 15.0000
33.0000 24.0000
33.0000 24.0000
>> vertex1
vertex1 =
12
15
>> vertex2
vertex2 =
33
24
结果中应消除两个点(vertex1
和vertex2
)。应该通过以下命令完成:
points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);
完成此操作后,我们将得到以下意外结果:
>> points
points =
33.0000 24.0000
结果应该是一个空矩阵。如您所见,第一对(或第二对)[33.0000 24.0000]
已被消除,但第二对没有被消除。
然后我检查了这两个表达式:
>> points(1) ~= vertex2(1)
ans =
0
>> points(2) ~= vertex2(2)
ans =
1 % <-- It means 24.0000 is not equal to 24.0000?
问题是什么?
更令人惊讶的是,我制作了一个仅包含以下命令的新脚本:
points = [12.0000 15.0000
33.0000 24.0000
33.0000 24.0000];
vertex1 = [12 ; 15];
vertex2 = [33 ; 24];
points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);
结果符合预期:
>> points
points =
Empty matrix: 0-by-2