Использование Streamslice / Quiver и Inpolygon обрезать - PullRequest
0 голосов
/ 12 декабря 2018

Предположим, у нас есть поле колчана, т.е. у нас есть сетка сетки, а затем мы назначаем вектор для каждой точки.Можно ли построить только поле колчана внутри какого-то многоугольника?

Итак, на рисунке ниже мы хотим, чтобы все, что находится за пределами треугольника, было обрезано.

enter image description here

В идеале код также будетполезно для следующего шага иметь несколько таких многоугольников и вырезать все на их дополнении.

Некоторые подходы:

  • Прямой способ состоит в том, чтобы вычислить сетку сетки для конкретного многоугольника, а затем назначить вектор для каждой точки.Но это займет много времени, чтобы понять, как многоугольники становятся более сложными.Другими словами, регулярная сетка является квадратным многоугольником, поэтому мы должны изменить матрицу сетки в зависимости от нашего многоугольника.Друг сообщил мне о коде Matlab генератора сетки .
  • Используйте inpolygon.На входе inpolygon находятся точки в (x, y).Но в нашем случае мы имеем только векторное поле, назначенное для сетки.Одна идея состоит в том, чтобы решить систему Оде, чтобы получить пары конкретных растворов (x, y) для подключения к многоугольнику.Но их решение занимает намного больше времени, и фотографии не так хороши.

1 Ответ

0 голосов
/ 12 декабря 2018

Вот пример кода, который, я думаю, сгенерирует тот тип графика, который вам нужен.Он использует inpolygon для «фильтрации» точек внутри многоугольника.Векторное поле все еще оценивается в исходных meshgrid точках.Он также легко распространяется на несколько полигонов.

clear
clc
x = linspace(0, 1, 21);
[X,Y] = meshgrid(x,x);

U = -Y; %some velocity field
V = X;

hold off
quiver(X,Y,U,V); %quiver on all points

polygon = [0.2,0.2;
           0.7,0.5;
           0.5,0.8]; %polygon vertices

ind = inpolygon(X,Y,polygon(:,1),polygon(:,2)); %get indices of points inside polygon

hold on
quiver(X(ind),Y(ind),U(ind),V(ind)); %quiver of points inside polygon
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...