Я пишу программу, где мне нужно удалить повторяющиеся точки, хранящиеся в матрице. Проблема в том, что, когда дело доходит до проверки того, находятся ли эти точки в матрице, 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?
В чем проблема?
Более удивительно, что я создал новый script, который имеет только следующие команды:
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