Захотел сделать некоторый способ проведения гладкой кривой через точки на плоскости, такой чтобы он формулировался математически наиболее просто. Оставим в стороне вопрос о том, не сделано ли это уже давно другими способами, чем тот что указан ниже. Если где-то сделано именно этим (у меня не получилось найти) - хорошо, посмотрю там результат.
Кривая задаётся функцией
, где
- линейная координата вдоль траектории кривой (можно и не ставить это обязательным условием, но тогда в уравнениях появятся лишние коэффициенты). У кривой есть мера её качества (чем численно меньше - тем больше подходит кривая):
, где
- радиус кривизны кривой в заданной точке её траектории,
- модуль второй производной функции по
, равный обратному радиусу кривизны, а
- параметр задачи, указывает насколько нам важно стремиться уменьшить полную длину кривой. В попытках получить из этого интеграла какие-то намёки на то, какой должна быть искомая кривая, проварьировал его:
, где
- функция первого порядка малости, а
- новая функция, от которой будет брать интеграл. Её аргумент
уже не равен координате вдоль траектории этой функции, он равен координате вдоль траектории исходной функции
, от точки которой смещена текущая точка функции
.
Получается (формула усложнилась т.к. модуль первой производной функции уже не равен единице, как это было изначально):
Требуется найти такую кривую
, где для любой малой
из допустимых граничными условиями выполняется неравенство
. Граничными условиями для
будет её равенство нулю в зафиксированных точках из условия задачи.
Для удобства расчётов были сделаны следующие подстановки/названия переменных:
,
, где
- единичный вектор направления траектории кривой,
- угол этого же направления. Также на функцию
наложено ограничение, которое не повлияет на итог: она должна быть направлена перпендикулярно траектории:
, и в дальнейшем используется только
(не вектор).
В итоге (если пропустить промежуточные выкладки) получается (все слагаемые второй и выше степеней
опущены):
Как видно, разница
меняет знак при смене знака
, а значит положительно определённый вариант для неё будет только в том случае, когда она строго равна нулю (а не ноль там получится из-за второго и следующих порядков
, ранее выкинутых - возможно это не совсем строгое утверждение но пока что и так сойдёт).
Итого, требуется найти такое
, проходящее через заданные точки (и, возможно, ещё с какими-то условиями), что
для любого
, удовлетворяющего граничным условиям.
Что делать дальше, не особо понятно. Подозреваю, что это какая-то простая задача.
Хотелось бы в как можно более общем виде. Но даже частные случаи непонятно как решать, например такой:
(всего две точки, первая в нуле координат, линия из неё выходит вдоль оси
, и должна попасть во вторую точку)
или такой:
(просто три точки)
Есть конечно вариант с перебором разных известных кривых и выбором из них лучшей по данному критерию, но это не совсем то.
(я надеюсь, меня простят за то, что много где не указано
после функций, где это и так очевидно из контекста; мне кажется что это замусорит формулы и их станет только неудобнее читать, но если это обязательно нужно то допишу)