Спроецируйте кубическую форму Безье p1, p2, p3, p4 на прямую p1, p4. Когда точка p2 или p3 не проецируется на отрезок линии между p1 и p4, кривая будет выступать из узловых точек. Есть ли способ вычислить значение T, когда касательная к кривой перпендикулярна линии привязки?
Это также можно было бы сформулировать как нахождение значений T там, где спроецированная кривая наиболее удалена от центра линейного сегмента p1, p4. Когда p2 и p3 проецируются на отрезок прямой, решения равны 0 и 1 соответственно. Есть ли уравнение для решения более интересного случая?
Значение T, похоже, зависит только от расстояния сопоставленных контрольных точек от сегмента линии привязки.
Я могу определить ценность, уточняя предположения, но надеюсь, что есть способ получше.
Редактировать:
Начиная с p1, .., p4 в 2d со значениями x1, y1, ..., x4, y4, я использую следующий код, основанный на ответе Филиппа:
dx = x4 - x1;
dy = y4 - y1;
d2 = dx*dx + dy*dy;
p1 = ( (x2-x1)*dx + (y2-y1)*dy ) / d2;
p2 = ( (x3-x1)*dx + (y3-y1)*dy ) / d2;
tr = sqrt( p1*p1 - p1*p2 - p1 + p2*p2 );
t1 = ( 2*p1 - p2 - tr ) / ( 3*p1 - 3*p2 + 1 );
t2 = ( 2*p1 - p2 + tr ) / ( 3*p1 - 3*p2 + 1 );
В примере, который я рассматривал, t2 нужно было вычесть из 1.0, прежде чем оно стало правильным.