#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)