Алгоритм нахождения центра кривой Безье

8

Мне нужно найти центр кривой Безье, чтобы повернуть его. У меня есть список всех точек (контрольные точки, начало и конец, все точки на самой кривой). Как мне найти его центр?

user4656
источник
4
Кривые - это математические объекты, у которых нет центров как таковых. Тем не менее, вы можете искать центр прямоугольной рамки, минимальный центр ограничивающей рамки, центр тяжести замкнутой области, лежащей под кривой, когда соединены конечные точки, центр тяжести замкнутых полибезизеров, средняя точка кривой, средняя точка управления и т. Д.
joojaa
1
@joojaa, безусловно, есть 2 природных центра, о которых я могу думать, один из них t=0.5. и два - это геометрическая середина относительно декартового расстояния перемещения вдоль линии.
v.oddou
1
@ v.oddou да на самом деле есть еще много причин, по которым вопрос нуждается в уточнении. Все векторные приложения, которые я использовал (Illustrator, XARA, Corel, Sketch и т. Д.). Используйте локальный ограничивающий прямоугольный центр для поворота объектов, поэтому редко можно увидеть другие определения центра, используемые вообще.
joojaa

Ответы:

14

Кривые Безье являются математическими объектами и не имеют четко определенного центра. Фактически можно определить много разных вещей как центр кривой Безье. Я попытался изобразить некоторые из возможных центров на рисунке 1. Больше, чем это существует.

введите описание изображения здесь

Рисунок 1 : Некоторые из возможных центров однопролетной кривой Безье

На практике почти все графические приложения, предназначенные для рисования, используют центр локальной ограничительной рамки (BB) в качестве своего центра. Анимационные программы, как правило, имеют дополнительную концепцию вращения, поэтому они используют подход запрашиваемого пользователя, если они не вводятся, они часто возвращаются к центру ВВ или просто к локальному координатному центру. Вероятно, это связано с тем, что ВВ все равно нужно вычислять, а получить его центр довольно легко (см. «Учебник по кривым Безье» ).

Метрики центра тяжести также несколько естественны, особенно в контексте анимации, хотя и сложнее вычислять. Проще всего дискретизировать данные и выполнить вычисления на дискретном входе. Тем не менее, некоторые решения в замкнутой форме возможны для кривой центра тяжести, но это не очень хорошее уравнение для формулировки и упрощения.

Тогда у нас есть точки на кривой: средняя точка по длине дуги и точка, где tпараметр составляет 0,5. На мой взгляд,tПараметр param часто проблематичен, хотя его легко вычислить, и он теряет смысл, когда вы объединяете несколько цепочек Безье друг за другом для полибезье. Центр длины, конечно, является естественным, если кривая не замкнута.

Мы также определяем другие возможные центры, центр может быть в центре кривой силы тяжести корпуса, в среднем контрольных точек или контрольной клетке BB центра. Хотя на практике это не очень хорошо работает.

Обратите внимание : хотя кривая на рисунке 1 показывает центр ВВ довольно близко к некоторым естественным центрам, это не всегда относится к более сложным кривым и особенно к полибезиерам.

joojaa
источник
3
Я бы не назвал это комментарием. Я бы назвал это отличным ответом, который касается текущего уровня знаний автора, полностью объясняет, почему вопрос шире, чем ожидалось, и открывает путь для новых вопросов.
трихоплакс
@trichoplax может быть назван «определить центр» менее вежливым.
фрик с трещоткой
@ratchetfreak Я предпочитаю ответы, которые пытаются определить пробел в знаниях спрашивающего, а не ожидать, что они полностью поймут тему, о которой они спрашивают.
Трихоплакс
Я ищу способ получить DISTANCE MIDPOINT для моих кривых четырехугольника и кубического Безье. Я использовал значение t 0,5, и, как вы сказали, я только что понял, что это проблематично. То, что я пытаюсь сделать сейчас с помощью вычисления Безье, - это движение шариков с равномерной скоростью. Но использование значения t усложняет задачу. Думаю, мне нужно найти правильные значения t в зависимости от длины дуги. Любой ресурс или небольшая подсказка для меня, пожалуйста?
Дженикс
2
К сожалению, для безье не существует ни одного общего решения в закрытой форме, но хороший ресурс, который охватывает численно это, и многое другое можно найти здесь. Хотя сейчас я читаю сегодня на работе, еще лучший ресурс должен ссылаться на него, но у меня нет ссылки на моем телефоне. Но, возможно, этого достаточно @Jenix
joojaa
1

Поскольку нам не говорят, какое определение «центр» использовать, мы можем также использовать самое простое. Это было бы

Center=14(P0+P1+P2+P3)
где P0, P1, P2, P3 контрольные точки кривой.
Bubba
источник