Spec-Zone.ru › Octave 6

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.

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

  • 2D и 3D: options = {"Qbb"}
  • 4D и выше: 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-мерные прямоугольные параллелепипеды, в этом случае вычисляется объем (или гиперобъем) в зависимости от числа измерений.

2-мерные прямоугольники определяются как [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/v6.4.0/Voronoi-Diagrams.html

Spec-Zone.ru

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