Как рассчитать третью контрольную точку кривой Безье квадратов c? - PullRequest
1 голос
/ 20 июня 2020

Я понимаю, как интерполировать положение кривых Безье. Но мне любопытно, как я могу вычислить третью контрольную точку, если у меня есть только две (2) контрольные точки ( Начало и конец ), а также интерполированное положение квадратичной c кривой Безье. Например, если у меня есть только A и C, как я могу рассчитать значение B .

См. Это изображение:

img .

Я ищу значение контрольной точки со знаком вопроса.

Я спрашиваю об этом, потому что хочу знать, как редакторы SVG архивируют что-то вроде:

это изображение

Красная точка представляет значение, которое я ищу. Надеюсь, я понимаю.

1 Ответ

0 голосов
/ 24 июня 2020

Квадратичная c Кривая Безье может быть наилучшим образом представлена ​​алгоритмом Де Кастельжау . Таким образом, для заданного t между 0 и 1 точка p на кривой определяется как:

  • точка q между a и b: q = t*a + (1-t)*b
  • точка r между b и c: r = t*b + (1-t)*c
  • , тогда точка p равна r = t*q + (1-t)*r

Итак, кривая Безье создается путем интерполяции между точками, которые, в свою очередь, также интерполируются. (Обратите внимание, что в отличие от первого изображения, ваше второе изображение не использует тот же t для 3 интерполяций.)

В 2D у вас есть 2 уравнения для p (одно для x и один для своего y). Допустим, указаны a, c и p. Затем у вас есть 3 неизвестных: t и x и y из b. Решение уравнения даст b = (a*t^2 + c*t^2 - 2*c*t + c - p)/(2*t*(t - 1)). Это означает, что b может быть где угодно на сложной кривой. Чтобы исправить b, вы можете выбрать фиксированное значение для t, например 1/2. Затем b = 2*p - (a + c)/2.

Другие способы ограничения b могут предполагать, что p является самой дальней точкой на кривой. Это сделало бы (q,r) параллельным (a,c) и привело бы к немного более сложным уравнениям ((rx - qx) * (cy - ay) == (ry - qy) * (cx - ax)). Наверное, их нужно решать численно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...