Извлеките и соедините полигоны или линейные сегменты

Этот пример показывает, как идентифицировать строку или сегменты закрашенной фигуры, если они были объединены в большой NaN - отсеченные векторы. Можно разделить их полигон или векторы строки в их сегменты компонента с помощью функции polysplit , которая берет вектор-столбцы в качестве входных параметров. Чтобы объединиться отдельный полигон или векторы строки используют polyjoin.

Создайте два NaN - разграниченные массивы в форме вектор-столбцов.

lat = [45.6 -23.47 78 NaN 43.9 -67.14 90 -89]';
lon = [13 -97.45 165 NaN 0 -114.2 -18 0]';

Разделите вектор-столбцы в отдельные массивы ячеек линейного сегмента в разделителях NaN с помощью polysplit.

[latc,lonc] = polysplit(lat,lon)
latc = 2x1 cell array
    {3x1 double}
    {4x1 double}

lonc = 2x1 cell array
    {3x1 double}
    {4x1 double}

Осмотрите содержимое массивов ячеек. Обратите внимание на то, что каждый элемент массива ячеек содержит сегмент исходной строки.

[latc{1} lonc{1}]
ans = 3×2

   45.6000   13.0000
  -23.4700  -97.4500
   78.0000  165.0000

[latc{2} lonc{2}]
ans = 4×2

   43.9000         0
  -67.1400 -114.2000
   90.0000  -18.0000
  -89.0000         0

Чтобы инвертировать процесс, используйте polyjoin.

[lat2,lon2] = polyjoin(latc,lonc);

Выполните логическое сравнение сегментов, к которым соединяют. Обратите внимание на то, что они идентичны с начальным lat и массивами lon . Логическое сравнение является ложным для разделителей NaN по определению.

[lat lon] == [lat2 lon2]
ans = 8x2 logical array

   1   1
   1   1
   1   1
   0   0
   1   1
   1   1
   1   1
   1   1

Протестируйте на глобальное равенство, включая значения NaN .

isequaln(lat,lat2) & isequaln(lon,lon2)
ans = logical
   1