30.1.2 Определение точек в триангуляции
Часто необходимо определить, находится ли определённая точка в N-мерном пространстве внутри триангуляции Делоне набора точек в этом N-мерном пространстве, и если да, то какой N-симплекс содержит точку и какая точка в триангуляции является ближайшей к желаемой точке. Функции tsearch и dsearch выполняют эту функцию в триангуляции, а tsearchn и dsearchn в N-мерной триангуляции.
Чтобы определить, находится ли конкретная точка, представленная вектором p, внутри одного из симплексов N-симплекса, мы можем записать декартовы координаты точки в параметрической форме относительно N-симплекса. Эта параметрическая форма называется барицентрическими координатами точки. Если точки, определяющие N-симплекс, заданы N + 1 векторами t(i,:), то барицентрические координаты, определяющие точку p, задаются
p = beta * t
где beta содержит N + 1 значение, которые вместе как вектор представляют барицентрические координаты точки p. Для обеспечения единственного решения для значений beta накладывается дополнительное условие
sum (beta) == 1
и поэтому мы можем записать вышеприведённое выражение как
p - t(end, :) = beta(1:end-1) * (t(1:end-1, :)
- ones (N, 1) * t(end, :) Решая для beta, мы можем записать
beta(1:end-1) = (p - t(end, :)) /
(t(1:end-1, :) - ones (N, 1) * t(end, :))
beta(end) = sum (beta(1:end-1)) что даёт формулу для преобразования декартовых координат точки p в барицентрические координаты beta. Важное свойство барицентрических координат заключается в том, что для всех точек в N-симплексе
0 <= beta(i) <= 1
Поэтому проверка в tsearch и tsearchn по существу требует только выражения каждой точки в терминах барицентрических координат каждого из симплексов N-симплекса и проверки значений beta. Именно такая реализация используется в tsearchn. tsearch оптимизирован для 2-мерного случая, и барицентрические координаты не формируются явно.
- : idx = tsearch (x, y, t, xi, yi)
-
Поиск охватывающей выпуклой оболочки Делоне.
Для
t = delaunay (x, y), находит индекс в t, содержащий точки(xi, yi). Для точек вне выпуклой оболочки idx является NaN.
- : idx = tsearchn (x, t, xi)
- : [idx, p] = tsearchn (x, t, xi)
-
Поиск охватывающей выпуклой оболочки Делоне.
Для
t = delaunayn (x), находит индекс в t, содержащий точки xi. Для точек вне выпуклой оболочки idx является NaN.Если запрошено
tsearchn, также возвращает барицентрические координаты p охватывающих треугольников.
Пример использования tsearch можно увидеть с простой триангуляцией
x = [-1; -1; 1; 1]; y = [-1; 1; -1; 1]; tri = [1, 2, 3; 2, 3, 4];
состоящей из двух треугольников, определённых tri. Затем мы можем определить, в какой треугольник попадает точка, например
tsearch (x, y, tri, -0.5, -0.5) ⇒ 1 tsearch (x, y, tri, 0.5, 0.5) ⇒ 2
и мы можем подтвердить, что точка не лежит ни внутри одного из треугольников, например
tsearch (x, y, tri, 2, 2) ⇒ NaN
Функции dsearch и dsearchn находят ближайшую точку в триангуляции к желаемой точке. Желаемая точка не обязательно должна находиться в триангуляции, и даже если она есть, возвращённая точка триангуляции не обязательно должна быть одной из вершин N-симплекса, в котором находится желаемая точка.
- : idx = dsearch (x, y, tri, xi, yi)
- : idx = dsearch (x, y, tri, xi, yi, s)
-
Возвращает индекс idx ближайшей точки в
x, yк элементам[xi(:), yi(:)].Переменная s принимается для совместимости, но игнорируется.
- : idx = dsearchn (x, tri, xi)
- : idx = dsearchn (x, tri, xi, outval)
- : idx = dsearchn (x, xi)
- : [idx, d] = dsearchn (…)
-
Возвращает индекс idx ближайшей точки в x к элементам xi.
Если указан outval, то значения xi, которые не содержатся ни в одном из симплексов tri, устанавливаются в outval. Обычно tri возвращается из
delaunayn (x).Необязательный выходной параметр d содержит вектор-столбец расстояний между точками запроса xi и ближайшими точками симплекса x.
Пример использования dsearch, используя вышеуказанные значения x, y и tri
dsearch (x, y, tri, -2, -2) ⇒ 1
Если вы хотите отметить точки, которые находятся вне триангуляции, то dsearchn может быть использовано как
dsearchn ([x, y], tri, [-2, -2], NaN) ⇒ NaN dsearchn ([x, y], tri, [-0.5, -0.5], NaN) ⇒ 1
где точки, находящиеся вне триангуляции, затем отмечаются значением NaN.
© 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/Identifying-Points-in-Triangulation.html