Некоторые мысли об этой проблеме.Я предполагаю, что была начальная кривая Безье P0
- P3
с контрольными точками P1
и P2
Давайте сделаем два подразделения при параметрах ta и tb.Теперь у нас есть две подкатушки (желтым цветом) - P0
- PA3
и PB0
- P3
.Синий интервал потерян.PA1
и PB2
- известные контрольные точки.Мы должны найти неизвестные P1
и P2
.
Некоторые уравнения
Начальная кривая:
C = P0*(1-t)^3+3*P1(1-t)^2*t+3*P2*(1-t)*t^2+P3*t^3
Конечные точки:
PA3 = P0*(1-ta)^3+3*P1*(1-ta)^2*ta+3*P2*(1-ta)*ta^2+P3*ta^3
PB0 = P0*(1-tb)^3+3*P1*(1-tb)^2*tb+3*P2*(1-tb)*tb^2+P3*tb^3
Контрольные точки маленьких кривых
PA1 = P0*(1-ta)+P1*ta => P1*ta = PA1 – P0*(1-ta)
PB2 = P2*(1-tb)+P3*tb => P2(1-tb) = PB2 – P3*tb
Теперь подставим неизвестные точки в уравнение PA3:
**PA3***(1-tb) = **P0***(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(**PA1** – **P0***(1-ta))+3*(1-ta)*ta^2*( **PB2** – **P3***tb)+**P3***ta^3*(1-tb)
(некоторые знаки умножения были потеряны из-за форматирования SO)
Thisявляется векторным уравнением, оно содержит два скалярных уравнения для двух неизвестных ta
и tb
PA3X*(1-tb) = P0X*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1X – P0X*(1-ta))+3*(1-ta)*ta^2*( PB2X – P3X*tb)+P3X*ta^3*(1-tb)
PA3Y*(1-tb) = P0Y*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1Y – P0Y*(1-ta))+3*(1-ta)*ta^2*( PB2Y – P3Y*tb)+P3Y*ta^3*(1-tb)
Эта система может быть решена как численно, так и аналитически (действительно, Maple решает ее с помощью очень-очень большой кубической формулы:()
Если у нас есть точки с некоторой ошибкой, то имеет смысл построить переопределенную систему уравнений для некоторых точек (PA3
, PB0
, PA2
, PB1
) и решить ее численно, чтобы минимизироватьотклонения.