Участник:RS42/Quickhull: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
(Новая страница: « = Свойства и структура алгоритмов = == Общее описание алгоритма == Задача построения выпу…»)
 
Строка 5: Строка 5:
 
Задача построения выпуклой оболочки является одной из важных проблем вычислительной геометрии. Выпуклую оболочку множества точек <math>X</math> можно определить следующим образом: это пересечение всевозможных выпуклых множеств, содержащих <math>X</math>. В случае конечного числа <math>n</math> точек из <math>X</math>:
 
Задача построения выпуклой оболочки является одной из важных проблем вычислительной геометрии. Выпуклую оболочку множества точек <math>X</math> можно определить следующим образом: это пересечение всевозможных выпуклых множеств, содержащих <math>X</math>. В случае конечного числа <math>n</math> точек из <math>X</math>:
 
:<math>\mathrm{Conv}(X)=\left\{\left.\sum_{i=1}^{n} \alpha_i x_i\  \right| (\forall i: \alpha_i\ge 0)\wedge \sum_{i=1}^{n} \alpha_i=1 \right\}.</math>
 
:<math>\mathrm{Conv}(X)=\left\{\left.\sum_{i=1}^{n} \alpha_i x_i\  \right| (\forall i: \alpha_i\ge 0)\wedge \sum_{i=1}^{n} \alpha_i=1 \right\}.</math>
 
+
Алгоритм Quickhull позволяет провести построение в пространстве произвольной размерности <math>d</math>. Результатом работы является множество <math>d-1</math>-мерных граней (facets) и вершин (vertices)
 +
полученной выпуклой оболочки.
  
 
== Математическое описание алгоритма ==
 
== Математическое описание алгоритма ==
THIS!!!!
+
Наложим на множество <math>X</math> следующее условие: любые <math>d+1</math> точки аффинно независимы (что тождественно тому, что они не лежат в одной <math>d-1</math> плоскости).
Приводится математическое описание решаемой задачи в виде совокупности формул и соотношений, как это принято в книгах и учебниках. По возможности, используются общепринятые обозначения и способы записи. Должны быть явно определены все использованные обозначения и описаны свойства входных данных. Представленное описание должно быть достаточным для однозначного понимания постановки решаемой задачи для человека, знающего математику.
+
Выпуклая оболочка будет задаваться списком вершин и граней. Для каждой грани известны ее вершины, ее соседние грани и уравнение гиперплоскости, в которой эта грань лежит.
 +
Ребро (ridge) определяется как пересечение двух соседних граней и имеет размерность <math>d-2</math>. Граница грани состоит из ребер.
  
 +
Нам понадобиться вычисление ориентированного расстояния от некоей точки <math>x</math> до гиперплоскости (signed distance to hyperplane). Зададим начало координат в точке <math>O</math>, плоскость определяется нормалью
 +
<math>\vec n</math> и смещением <math>h</math> относительно начала координат. Тогда ориентированное расстояние будет равно <math>(\vec x, \vec n) - h</math>, где <math>\vec x = x - O</math>.
 +
Если ориентированное расстояние положительно, то можно сказать, что точка находится выше плоскости (или плоскость видна из точки). В нашем случае все грани выпуклой оболочки во время построения будут иметь
 +
такие нормали и смещения, что для точек внутри оболочки расстояния до каждой плоскости будут неположительными.
 +
<source>
 +
create a simplex of d+1 points
 +
for each facet F
 +
  for each unassigned point p
 +
    if p is above F
 +
      assign p to F's outside set
 +
for each facet F with non-empty outside set
 +
  select the furthest point p of F's outside set
 +
  initialize the visible set V to F
 +
  for all unvisited neighbors N of facets in V
 +
    if p is above N
 +
      add N to V
 +
  the boundary of V is the set of horizon ridges H
 +
  for each ridge R in H
 +
    create a new facet from R and p
 +
    link the new facet to its neighbors
 +
  for each new facet G
 +
    for each unassigned point q in an outside set of a facet in V
 +
      if q is above G
 +
        assign q to outside set of G
 +
  delete the facets in V
 +
</source>
 
= Программная реализация алгоритма =
 
= Программная реализация алгоритма =
  
 
= Литература =
 
= Литература =
 
*Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull algorithm for convex hulls," ACM Trans. on Mathematical Software, 22(4):469-483, Dec 1996, http://www.qhull.org
 
*Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull algorithm for convex hulls," ACM Trans. on Mathematical Software, 22(4):469-483, Dec 1996, http://www.qhull.org

Версия 01:02, 21 октября 2017

1 Свойства и структура алгоритмов

1.1 Общее описание алгоритма

Задача построения выпуклой оболочки является одной из важных проблем вычислительной геометрии. Выпуклую оболочку множества точек [math]X[/math] можно определить следующим образом: это пересечение всевозможных выпуклых множеств, содержащих [math]X[/math]. В случае конечного числа [math]n[/math] точек из [math]X[/math]:

[math]\mathrm{Conv}(X)=\left\{\left.\sum_{i=1}^{n} \alpha_i x_i\ \right| (\forall i: \alpha_i\ge 0)\wedge \sum_{i=1}^{n} \alpha_i=1 \right\}.[/math]

Алгоритм Quickhull позволяет провести построение в пространстве произвольной размерности [math]d[/math]. Результатом работы является множество [math]d-1[/math]-мерных граней (facets) и вершин (vertices) полученной выпуклой оболочки.

1.2 Математическое описание алгоритма

Наложим на множество [math]X[/math] следующее условие: любые [math]d+1[/math] точки аффинно независимы (что тождественно тому, что они не лежат в одной [math]d-1[/math] плоскости). Выпуклая оболочка будет задаваться списком вершин и граней. Для каждой грани известны ее вершины, ее соседние грани и уравнение гиперплоскости, в которой эта грань лежит. Ребро (ridge) определяется как пересечение двух соседних граней и имеет размерность [math]d-2[/math]. Граница грани состоит из ребер.

Нам понадобиться вычисление ориентированного расстояния от некоей точки [math]x[/math] до гиперплоскости (signed distance to hyperplane). Зададим начало координат в точке [math]O[/math], плоскость определяется нормалью [math]\vec n[/math] и смещением [math]h[/math] относительно начала координат. Тогда ориентированное расстояние будет равно [math](\vec x, \vec n) - h[/math], где [math]\vec x = x - O[/math]. Если ориентированное расстояние положительно, то можно сказать, что точка находится выше плоскости (или плоскость видна из точки). В нашем случае все грани выпуклой оболочки во время построения будут иметь такие нормали и смещения, что для точек внутри оболочки расстояния до каждой плоскости будут неположительными.

create a simplex of d+1 points
for each facet F
  for each unassigned point p
    if p is above F
      assign p to F's outside set
for each facet F with non-empty outside set
  select the furthest point p of F's outside set
  initialize the visible set V to F
  for all unvisited neighbors N of facets in V
    if p is above N
      add N to V
  the boundary of V is the set of horizon ridges H
  for each ridge R in H
    create a new facet from R and p
     link the new facet to its neighbors
  for each new facet G
    for each unassigned point q in an outside set of a facet in V
      if q is above G
        assign q to outside set of G
  delete the facets in V

2 Программная реализация алгоритма

3 Литература

  • Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull algorithm for convex hulls," ACM Trans. on Mathematical Software, 22(4):469-483, Dec 1996, http://www.qhull.org