Spec-Zone.ru › Octave 7

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-мерные прямоугольные параллелепипеды, в этом случае вычисляется объем или гиперобъем в соответствии с количеством измерений.

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/v7.2.0/Voronoi-Diagrams.html

Spec-Zone.ru

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