Когда P1 изменяется от (0,4) до (0,2), Q1 (t = 0,5) и Q2 (t = 0,6), перемещаются соответственно на 0,75 и 0,576. Как я могу рассчитать для любого B (t) расстояние, которое он перемещает, когда P1 или P2 перемещаются (Start-P1) или (P2-End) соответственно?Как работает B (t) кривой безье, когда P1/P2 перемещается вдоль касательной?
ответ
Просто напишите выражение кривой Безье:
B(t) = P0 * (1-t)^3 + P1 * 3 * t * (1-t)^2 + P2 * 3 * t^2 * (1-t) + P3 * t^3
Давайте P1' новое положение контрольной точки P1. Только второй срок будет изменен, так
DeltaB(t) = B'(t) - B(t) = (P1' - P1) * 3 * t * (1-t)^2
если ложь P1' на P0-P1, то
P1' = P0 + (P1 - P0) * u
DeltaB(t) = (P0 + (P1 - P0) * u - P1) * 3 * t * (1-t)^2 =
(P0 - P1) * (1 - u) * 3 * t * (1-t)^2
Для примера данные
u = 0.5
(P0 - P1) * (1 - u) = (0, -2) // (x,y) components of vector
DeltaB(0.5) = (0, -2 * 3 * 0.5 * 0.25) = (0, -0.75)
DeltaB(0.6) = (0, -2 * 3 * 0.6 * 0.4 * 0.4) = (0, -0.576)
Извините, я кое-что забыл ... На изображении P2 есть (3,4). Когда P2, например. (2,4), и вы перемещаете P1 в (0,2) Q1 (t = 0,5), все еще перемещается на 0,75. Вот почему я думаю, что есть более простой и быстрый способ рассчитать это, чем просто подключить новое значение для P1. Отношение, по-видимому, одинаково для каждой кривой. По крайней мере, сейчас я думаю, что при t = 0,5 и вы перемещаете P1 или P2 1 единиц (Start-P1) или (P2-End) Q1 перемещает блок/2.666 в одном направлении ... Но я читаю Mike's статья теперь ... – marcus
'Q1 перемещает блок/2.66' - да, посмотрите на мою вторую формулу: deltaQ1 = deltaP1 * 3/8 (для t = 0,5) – MBo
Действительно, супер полезно. Я знал, что это не может быть сложно, но я всегда слишком слеп, чтобы видеть эти простые вещи. Спасибо! – marcus
Вы хотите спросить это снова на http://math.stackexchange.com вместо этого, хотя они могут сказать вам взять какую-то бумагу, вычертить кривую с координатами, представленными символами, а затем просто выписать результат линейных интерполяций Де Кастельжау с той разницей, применение к одной из координат. Когда вы это сделаете, также убедитесь, что другие три точки соответствуют фактическим координатам. Неважно. И, наконец, http://pomax.github.io/bezierinfo/#moulding охватывает некоторые из этих. –