Нахождение вершины кривой Безье - PullRequest
0 голосов
/ 05 июля 2010

Я работаю в flex, хотя считаю, что это не зависит от языка.Я пытаюсь нарисовать кривую, используя 3 точки, используя curveTo (квадратичная функция Безье, я не верю, что у Flex есть что-то другое, если оно есть, пожалуйста, исправьте меня!)2 - ручка для перетаскивания.

Я хочу, чтобы линия не изгибалась к точке 2, а проходила через нее.Мне удалось заставить это работать, обдумав это - удвоив (расстояние между средней точкой линии между точками 1 и 3) и точкой 2.

Это не помещает его на вершинулиния, хотя, просто где-то близко к ней.

Кто-нибудь есть идеи?

Андрей

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Сплайн Безье не пройдет через свои контрольные точки, но сплайн Catmull Rom пройдет.

B(t) = ((2*P1)+(-P0+P2)*t + (2*P0-5*P1+4*P2-P3)*t*t + (-P0+3*P1-3*P2+P3)*t*t*t )) / 2

Хотя это скорее кубический, чем квадратичный сплайн.Вы можете попробовать сделать P1=P2

0 голосов
/ 29 октября 2017

Используя эту формулу: B'(t) = 3 (1 - t) 2 (P1 - P0) + 6 (1 - t) t (P2 - P1) + 3 t2 (P3 - P2)

Вы можете использовать производную, чтобы найти максимумы и минимумы.

0 голосов
/ 05 июля 2010

Квадратичная кривая Безье рассчитывается по формуле

B(t) = (1-t)(1-t)*P0 + 2(1-t)t*P1 + t*t*P2

где P0, P1 и P2 - это 3 точки, которые вы укажете. Кривая начинается в P0 и заканчивается в P2 т колеблется от 0 до 1 вершина должна быть достигнута при t = 0,5 поэтому попробуйте вставить P0, P2 и t = 0,5 в формулу, установив ее равной точке, где Вы хотите, чтобы апекс был и извлекал P1 из формулы

...