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");
- : [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. Для передачи пустых аргументов используйте пустую строку. - 2-D и 3-D: options =
Пример использования 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. Обратите внимание, что к этому рисунку была добавлена описанная окружность одного из треугольников, чтобы прояснить связь между триангуляцией Делоне и диаграммой Вороного.
Рисунок 30.3: Триангуляция Делоне (синие линии) и диаграмма Вороного (красные линии) произвольного набора точек
Дополнительную информацию о размерах граней диаграммы Вороного и о том, какие точки набора точек находятся в многоугольнике, можно получить с помощью функций polyarea и inpolygon соответственно.
- : a = polyarea (x, y) ¶
- : a = 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), верните истину, если точки(x, y)находятся внутри (или на границе) многоугольника; в противном случае верните ложь.Входные переменные 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.
Рисунок 30.4: Демонстрация использования функции inpolygon для определения точек внутри многоугольника
© 1996–2023 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/v8.1.0/Voronoi-Diagrams.html