У меня есть две функции, описывающие две кривые в 2D.Наименьшее расстояние между двумя кривыми, определяемыми функциями
p1 = f1(t1)
p2 = f2(t2)
, где p1
и p2
являются векторами, t1
и t2
скаляры со значением между 0,0 и 1,0.
Кривые оба выпуклые с «животами», обращенными друг к другу. Они могут быть повернуты и могут быть определены новые функции y = h(x)
, так что их производные на x
будут монотонно увеличиваться/уменьшаться.
Пример:
Я пытаюсь найти эффективный алгоритм, чтобы найти минимальное расстояние между этими кривыми.
Возможный подход, я думаю, можно было бы определить функцию расстояния:
g(t1, t2) = |f1(t1) - f2(t2)|
, а затем использовать обобщение Newton's method для решения системы уравнений
0 = ∂g(t1, t2)/∂t1 // partial derivative of g for t1
0 = ∂g(t1, t2)/∂t2 // partial derivative of g for t2
Но я не уверен, что это правильно, и это немного неудобно, потому что мне понадобятся первая и вторая производные от g
, которые мне пришлось бы вычислить численно.
Есть ли более простой, возможно более быстрый алгоритм для этого?
Не могли бы вы добавить цифру? Я предполагаю, что вы имеете в виду две * кривые *. Строка прямая (что сделало бы проблему довольно скучной). Я также не уверен, что вы подразумеваете под векторами 'p1' и' p2'. –
Да, я имею в виду кривые, спасибо. Я постараюсь сделать снимок. Векторы - это точки на кривых. Когда вы оцениваете 'f1' с' t1', идущим от 0.0 до 1.0, вы получаете векторы к точкам на кривой. – alain
Кривые не могут быть выпуклыми. Проблемы могут. И независимо от того, является ли ваш выпуклый, зависит от кривых. Вы знаете что-нибудь о них? –