Наложение многоугольников с использованием Set Logic

В этом примере показано, как наложить многоугольники с помощью логики set. The polybool функция может выполнять стандартные операции набора, такие как пересечение, объединение, вычитание и исключающее ИЛИ, для двух наборов векторов, которые могут представлять пары координат x-y или широты-долготы. Для получения дополнительной информации см. Раздел «Логика набора многоугольников»

Создайте два многоугольника

Чтобы проиллюстрировать эти операции набора, создайте 12-сторонний многоугольник и треугольник, который перекрывается с ним.

az = (0:pi/6:2*pi)';
lat1 = cos(az);
lon1 = sin(az);

lat2 = [0 1 -1 0]';
lon2 = [0 2 2 0]';

Вычисление пересечения двух многоугольников

Постройте график двух фигур с синей и красными линиями. Вычислите многоугольник пересечения с помощью polybool и постройте график с помощью geoshow.

figure
axesm miller
plotm(lat1,lon1,'b')
plotm(lat2,lon2,'r')
[loni,lati] = polybool('intersection',lon1,lat1,lon2,lat2);
[lati loni]
ans = 5×2

    0.0000    1.0000
   -0.4409    0.8819
    0.0000         0
    0.4409    0.8819
    0.0000    1.0000

geoshow(lati,loni,'DisplayType','polygon')

Figure contains an axes. The axes contains 3 objects of type line, patch.

Вычисление объединения двух многоугольников

Постройте график двух фигур с синей и красными линиями. Вычислите многоугольник объединения с помощью polybool и постройте график с помощью geoshow.

figure
axesm miller
plotm(lat1,lon1,'b')
plotm(lat2,lon2,'r')
[lonu,latu] = polybool('union',lon1,lat1,lon2,lat2);
[latu lonu]
ans = 16×2

   -1.0000    2.0000
   -0.4409    0.8819
   -0.5000    0.8660
   -0.8660    0.5000
   -1.0000    0.0000
   -0.8660   -0.5000
   -0.5000   -0.8660
    0.0000   -1.0000
    0.5000   -0.8660
    0.8660   -0.5000
      ⋮

geoshow(latu,lonu,'DisplayType','polygon')

Figure contains an axes. The axes contains 3 objects of type line, patch.

Вычисление исключительного значения двух многоугольников

Постройте график двух фигур с синей и красными линиями. Вычислите многоугольник Exclusive-Or с помощью polybool и постройте график с помощью geoshow.

figure
axesm miller
plotm(lat1,lon1,'b')
plotm(lat2,lon2,'r')
[lonx,latx] = polybool('xor',lon1,lat1,lon2,lat2);
[latx lonx]
ans = 22×2

   -1.0000    2.0000
   -0.4409    0.8819
   -0.5000    0.8660
   -0.8660    0.5000
   -1.0000    0.0000
   -0.8660   -0.5000
   -0.5000   -0.8660
    0.0000   -1.0000
    0.5000   -0.8660
    0.8660   -0.5000
      ⋮

geoshow(latx,lonx,'DisplayType','polygon')

Figure contains an axes. The axes contains 3 objects of type line, patch.

Вычислите вычитание двух многоугольников

Постройте график двух фигур с синей и красными линиями. Вычесть треугольник Exclusive-Or из 12-стороннего многоугольника и построить график получившегося вогнутого многоугольника с помощью geoshow.

figure
axesm miller
plotm(lat1,lon1,'b')
plotm(lat2,lon2,'r')
[lonm,latm] = polybool('minus',lon1,lat1,lon2,lat2);
[latm lonm]
ans = 15×2

    0.8660    0.5000
    0.5000    0.8660
    0.4409    0.8819
    0.0000         0
   -0.4409    0.8819
   -0.5000    0.8660
   -0.8660    0.5000
   -1.0000    0.0000
   -0.8660   -0.5000
   -0.5000   -0.8660
      ⋮

geoshow(latm,lonm,'DisplayType','polygon')

Figure contains an axes. The axes contains 3 objects of type line, patch.