使用流片/颤动和多边形裁剪

时间:2018-12-11 21:02:04

标签: matlab

假设我们有一个颤抖场,即我们有一个网格,然后为每个点分配一个向量。是否可以仅绘制某个多边形内的颤动场?

因此在下图中,我们希望将三角形之外的所有内容都裁剪掉。

enter image description here

理想情况下,该代码对于下一步是有用的,即拥有多个此类多边形并将其补全裁剪掉。

一些方法:

  • 一种直接方法是找出特定多边形的网格,然后将矢量分配给每个点。但是随着多边形变得越来越复杂,这将花费大量时间。换句话说,规则网格是正方形多边形,因此我们必须根据多边形来修改网格矩阵。一位朋友告诉了我a mesh generator matlab code
  • 使用多边形。非多边形的输入是(x,y)中的点。但是在我们的情况下,我们仅将矢量字段分配给了网格。一种想法是解决ode系统以获得具体的解决方案对(x,y)以插入多边形。但是解决这些问题要花费更长的时间,而且图片也不尽如人意。

1 个答案:

答案 0 :(得分:0)

这里有一些示例代码,我认为它们会生成您想要的绘图。它使用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