exponenta event banner

Наложение полигонов с помощью заданной логики

В этом примере показано, как наложить многоугольники с помощью логики набора. 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.