Нахождение минимального расстояния между двумя сплайнами

У меня есть два 3D-сплайна, созданные MATLAB:

curve1 = cscvn([0 .5 0; 0 .5 0; 0 .5 1])
curve2 = cscvn([.5 .2 .5; 2 1 0; .1 2 1]);

Я хочу найти наименьшее возможное расстояние между любой точкой кривой 1 и любой точкой кривой 2.

Спасибо, Джеймс


person James    schedule 12.11.2014    source источник
comment
Некоторые помогают тому, как сформулировать свою проблему.   -  person rozsasarpi    schedule 12.11.2014


Ответы (1)


Наименьшее расстояние между двумя параметрическими кривыми C1(t) и C2(s) может быть в их внутренней части или в их конечных точках. Если это произойдет внутри, то будет выполнено следующее условие:

C1'(t) \dot (C1(t) - C2(s)) = 0
C2'(s) \dot (C1(t) - C2(s)) = 0

Это означает, что когда минимальное расстояние происходит в точках t0 и s0, касательный вектор в точке C1(t0) и касательный вектор в точке C2(s0) перпендикулярны вектору, определяемому векторами C1(t0) и C2(s0). В общем случае для получения параметров t0 и s0 можно использовать многомерный метод Ньютона-Рафсона. Если вы найдете решение, вы можете найти минимальное расстояние.

Обратите внимание, что два приведенных выше уравнения по-прежнему справедливы для локального максимума. Таким образом, вам всегда нужно будет сравнивать полученное «минимальное расстояние» с расстояниями между конечными точками.

person fang    schedule 12.11.2014