我正在编写一个程序,我需要删除存储在矩阵中的重复点。问题是,当检查这些点是否在矩阵中时,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