Наложите полигоны Используя логику набора

Этот пример показывает, как наложить полигоны с помощью логики набора. Функция 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')

Вычислите объединение этих двух полигонов

Постройте две формы вместе с синим и красными линиями. Вычислите полигон объединения с помощью 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')

Вычислите исключительное - или этих двух полигонов

Постройте две формы вместе с синим и красными линиями. Вычислите Исключительное - Или полигон с помощью 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')

Вычислите вычитание этих двух полигонов

Постройте две формы вместе с синим и красными линиями. Вычтите Исключительное - Или треугольник от 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')