Мы можем использовать стандартную аппроксимацию полиномиальной кривой, чтобы найти одну кубическую кривую Безье через любой набор из четырех точек, но у вас всегда останется проблема со свободными параметрами: две из этих точек будут началом иконец кривой, поэтому мы знаем, что их значения времени равны 0 и 1, но эти две точки полностью свободны с точки зрения значения времени, и поэтому вам придется прийти к разумному предположению о том, какими они должны быть доВы можете оценить свою кривую.
См. https://pomax.github.io/bezierinfo/#curvefitting для математики, если вы хотите реализовать это самостоятельно, или найти библиотеку, которая выполняет полиномиальную подборку (что означает любой полу-приличный пакет статистики),и затем для значений времени у вас есть несколько вариантов:
- Предположим, что точки совпадают с t = 0, t = 1/3, t = 2/3 и t = 1.Это почти всегда плохая идея, потому что точки редко располагаются равномерно по отношению к кубическому распределению.
- Угадайте значения t на основе линейного расстояния с полной длиной набора ломаных p0-p1-p2-p31, а значение в каждой точке просто равно расстоянию вдоль ломаной линии, поэтому t0 = 0, t1 = dist (p0, p1), t2 = dist (p0, p1) + dist (p1,2), t3 =1.
- Добейтесь большего и выберите начальный набор значений t, затем проанализируйте полученный Безье и итеративно сгенерируйте новые кривые, оптимизируя некоторые качества, такие как однородность кривизны, ограничивающая область коробки / корпуса, выравнивание p1 / p2 по минимумурадиус и т. д.
Из них, очевидно, 2 даст «разумные» результаты с наименьшими усилиями, но если вы пишете графическое приложение, «разумное» зависит от того, что выпользователям нужно, а не то, что легко для вас.