Spec-Zone.ru › Octave 5

30.2 Диаграммы Вороного

Диаграмма Вороного или разбиение Вороного для набора точек s в N-мерном пространстве — это разбиение N-мерного пространства, такое, что все точки в v(p), подмножества разбиения, где p — член s, находятся ближе к p, чем к любой другой точке в s. Диаграмма Вороного связана с триангуляцией Делоне набора точек тем, что вершины разбиения Вороного являются центрами описанных окружностей простых многоугольников разбиения Делоне.

voronoi (x, y)
voronoi (x, y, options)
voronoi (…, "linespec")
voronoi (hax, …)
h = voronoi (…)
[vx, vy] = voronoi (…)

Постройте диаграмму Вороного точек (x, y).

Грани Вороного с точками в бесконечности не рисуются.

Аргумент options, который должен быть строкой или массивом строк, содержит параметры, передаваемые команде qhull. Подробности см. в документации библиотеки Qhull http://www.qhull.org/html/qh-quick.htm#options.

Если "linespec" задан, он используется для установки цвета и стиля линии графика.

Если указана дескрипторная переменная осей графики hax, то диаграмма Вороного строится на указанных осях, а не на новом рисунке.

Если запрашивается единственный выходной аргумент, то диаграмма Вороного будет нарисована, а дескрипторная переменная графика h к графику будет возвращена.

[vx, vy] = voronoi (…) возвращает вершины Вороного вместо построения диаграммы.

x = rand (10, 1);
y = rand (size (x));
h = convhull (x, y);
[vx, vy] = voronoi (x, y);
plot (vx, vy, "-b", x, y, "o", x(h), y(h), "-g");
legend ("", "points", "hull");

См. также: voronoin, delaunay, convhull.

[C, F] = voronoin (pts)
[C, F] = voronoin (pts, options)

Вычислите N-мерные грани Вороного.

Входная матрица pts размера [n, dim] содержит n точек в пространстве размерности dim.

C содержит точки граней Вороного. Список F содержит для каждой грани индексы точек Вороного.

Необязательный второй аргумент, который должен быть строкой или массивом строк, содержит параметры, передаваемые команде qhull. Подробности см. в документации библиотеки Qhull http://www.qhull.org/html/qh-quick.htm#options.

Параметры по умолчанию зависят от размерности входных данных:

  • 2-D и 3-D: options = {"Qbb"}
  • 4-D и выше: options = {"Qbb", "Qx"}

Если options отсутствует или [] то используются параметры по умолчанию. В противном случае options заменяет список параметров по умолчанию. Чтобы добавить пользовательские параметры к параметрам по умолчанию, необходимо повторить параметры по умолчанию в options. Используйте пустую строку, чтобы не передавать аргументов.

См. также: voronoi, convhulln, delaunayn.

Пример использования voronoi:

rand ("state",9);
x = rand (10,1);
y = rand (10,1);
tri = delaunay (x, y);
[vx, vy] = voronoi (x, y, tri);
triplot (tri, x, y, "b");
hold on;
plot (vx, vy, "r");

Результат можно увидеть в рисунке 30.3. Обратите внимание, что описанная окружность одного из треугольников была добавлена на этот рисунок, чтобы прояснить связь между разбиением Делоне и диаграммой Вороного.

voronoi

Рисунок 30.3: Триангуляция Делоне (синие линии) и диаграмма Вороного (красные линии) случайного набора точек

Дополнительную информацию о размерах граней диаграммы Вороного и о том, какие точки из набора точек находятся в многоугольнике, можно получить с помощью функций polyarea и inpolygon соответственно.

polyarea (x, y)
polyarea (x, y, dim)

Определите площадь многоугольника методом треугольников.

Переменные x и y определяют пары вершин и должны иметь одинаковую форму. Они могут быть векторами или массивами. Если они являются массивами, то столбцы x и y обрабатываются отдельно, и возвращается площадь для каждого.

Если задан необязательный аргумент dim, то polyarea работает по этому измерению массивов x и y.

Пример использования polyarea может быть:

rand ("state", 2);
x = rand (10, 1);
y = rand (10, 1);
[c, f] = voronoin ([x, y]);
af = zeros (size (f));
for i = 1 : length (f)
  af(i) = polyarea (c (f {i, :}, 1), c (f {i, :}, 2));
endfor

Грани диаграммы Вороного с вершиной в бесконечности имеют бесконечную площадь. Упрощенная версия polyarea для прямоугольников доступна с помощью rectint

area = rectint (a, b)

Вычислить площадь или объем пересечения прямоугольников или N-мерных прямоугольных параллелепипедов.

Вычислите площадь пересечения прямоугольников в a и прямоугольников в b. Поддерживаются N-мерные прямоугольные параллелепипеды, в этом случае вычисляется объем или гиперобъем в соответствии с количеством измерений.

Двумерные прямоугольники определяются как [xpos ypos width height] где xpos и ypos — положение левого нижнего угла. Поддерживаются и высшие измерения, где координаты минимального значения каждого измерения следуют за длиной прямоугольника в этом измерении, например, [xpos ypos zpos kpos … width height depth k_length …].

Каждая строка a и b определяет прямоугольник, и если оба определяют несколько прямоугольников, то вывод area — матрица, где i-я строка соответствует i-й строке a, а j-й столбец соответствует j-й строке b.

См. также: polyarea.

in = inpolygon (x, y, xv, yv)
[in, on] = inpolygon (x, y, xv, yv)

Для многоугольника, определенного точками вершин (xv, yv), вернуть true, если точки (x, y) находятся внутри (или на границе) многоугольника; В противном случае вернуть false.

Входные переменные x и y должны иметь одинаковую размерность.

Необязательный вывод on возвращает true, если точки находятся точно на ребре многоугольника, и false в противном случае.

См. также: delaunay.

Пример использования inpolygon может быть:

randn ("state", 2);
x = randn (100, 1);
y = randn (100, 1);
vx = cos (pi * [-1 : 0.1: 1]);
vy = sin (pi * [-1 : 0.1 : 1]);
in = inpolygon (x, y, vx, vy);
plot (vx, vy, x(in), y(in), "r+", x(!in), y(!in), "bo");
axis ([-2, 2, -2, 2]);

Результат можно увидеть в рисунке 30.4.

inpolygon

Рисунок 30.4: Демонстрация функции inpolygon для определения точек внутри многоугольника

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Voronoi-Diagrams.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API