2015-12-21 5 views
0

Когда 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 перемещается вдоль касательной?

enter image description here

+0

Вы хотите спросить это снова на http://math.stackexchange.com вместо этого, хотя они могут сказать вам взять какую-то бумагу, вычертить кривую с координатами, представленными символами, а затем просто выписать результат линейных интерполяций Де Кастельжау с той разницей, применение к одной из координат. Когда вы это сделаете, также убедитесь, что другие три точки соответствуют фактическим координатам. Неважно. И, наконец, http://pomax.github.io/bezierinfo/#moulding охватывает некоторые из этих. –

ответ

1

Просто напишите выражение кривой Безье:

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) 
+0

Извините, я кое-что забыл ... На изображении 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

+1

'Q1 перемещает блок/2.66' - да, посмотрите на мою вторую формулу: deltaQ1 = deltaP1 * 3/8 (для t = 0,5) – MBo

+0

Действительно, супер полезно. Я знал, что это не может быть сложно, но я всегда слишком слеп, чтобы видеть эти простые вещи. Спасибо! – marcus