Por que 24.0000 não é igual a 24.0000 em MATLAB?
Estou escrevendo um programa em que preciso excluir pontos duplicados armazenados em uma matriz. O problema é que, quando se trata de verificar se esses pontos estão na matriz, o MATLAB não pode reconhecê-los na matriz, embora exista
No código a seguir,intersections
função @ obtém os pontos de interseção:
[points(:,1), points(:,2)] = intersections(...
obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ...
[vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]);
O resultado
>> points
points =
12.0000 15.0000
33.0000 24.0000
33.0000 24.0000
>> vertex1
vertex1 =
12
15
>> vertex2
vertex2 =
33
24
Dois pontos vertex1
evertex2
) deve ser eliminado do resultado. Isso deve ser feito pelos comandos abaixo:
points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);
Depois disso, temos esse resultado inesperado:
>> points
points =
33.0000 24.0000
O resultado deve ser uma matriz vazia. Como você pode ver, o primeiro (ou o segundo?) Par de[33.0000 24.0000]
foi eliminado, mas não o segundo.
Depois verifiquei estas duas expressões:
>> points(1) ~= vertex2(1)
ans =
0
>> points(2) ~= vertex2(2)
ans =
1 % <-- It means 24.0000 is not equal to 24.0000?
Qual é o problema
Surpreendentemente, criei um novo script que possui apenas estes comandos:
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)), :);
O resultado como esperado:
>> points
points =
Empty matrix: 0-by-2