Найти точки X, Y в polyshape — Matlab

#matlab

#matlab

Вопрос:

Как я могу найти все точки Y в poylshape, когда X определено как 0,5, и как найти все точки X, когда Y определено как 0,75? (искомые числа могут быть изменены)

Код:

 clc;
clear all;
close all;

P = [0.5 0.5; 1 0.75; 0.5 0.75; 0.8 0.8; 0.25 1; 0 1];
pgon = polyshape(P)
plot(pgon)
 
 

Комментарии:

1. Когда вы говорите «точки», вы имеете в виду вершины многоугольника или все точки, содержащиеся в многоугольнике для заданного X или Y ?

2. Все точки в многоугольнике приведут к линии для данного X или Y в другом случае.

3. Я имею в виду извлечение соответствующих X или Y в P (класс ‘double’)

Ответ №1:

Логическое индексирование заданного столбца

Один из способов получить совпадающие пары — использовать логическое индексирование для данного столбца и использовать его для индексации дополнительного столбца. В случае, X если известно, мы можем использовать это, чтобы оценить, какие индексы в первом столбце равны определенному значению, а затем использовать эти индексы для получения соответствующих Y значений во втором столбце. Обратный случай аналогичен, когда Y известен / задан.

 clc;
P = [0.5 0.5; 1 0.75; 0.5 0.75; 0.8 0.8; 0.25 1; 0 1];
pgon = polyshape(P);
plot(pgon);

%Inputting X-coordinate%
X = 0.5;
Y_Points = P(P(:,1) == X,2);
X_Points = repmat(X,[length(Y_Points) 1]);
disp("X: "   num2str(X));
arrayfun(@(x,y) fprintf("(x,y) -> (%.2f,%.2f)n",x,y), X_Points,Y_Points);
fprintf("n")

%Inputting Y-coordinate%
Y = 0.75;
X_Points = P(P(:,2) == Y,1);
Y_Points = repmat(Y,[length(X_Points) 1]);
disp("Y: "   num2str(Y));
arrayfun(@(x,y) fprintf("(x,y) -> (%.2f,%.2f)n",x,y), X_Points,Y_Points);
 

Вывод результатов:

X: 0,5
(x, y) -> (0,50, 0,50)
(x, y) -> (0,50, 0,75)

Y: 0,75
(x, y) -> (1,00, 0,75)
(x, y) -> (0,50, 0,75)