Поиск контрольных точек кривой Безье

Привет, пользователи stackoverflow!

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

Итак, я пишу игру, и у меня есть кривая Безье, которая контролирует, куда движется актер. Использую только 3 точки (start, control1, end) и все нормально.

Теперь я хочу создать кривую Безье, которая проходит через определенную точку (r1) при t = 0,5. Проблема в том, что у меня есть начальная точка, конечная точка и точка (r1) при t=0,5, и мне нужно найти контрольную точку.

Извините, если я плохо объяснил, я надеюсь, что все могут понять.

Спасибо за любые ответы :)


person user745739    schedule 09.05.2011    source источник
comment
Является ли r1 средней точкой (или гребнем) между начальной и конечной точками кривой?   -  person Chunky Chunk    schedule 10.05.2011
comment
Кривая Безье требует двух контрольных точек. Вы объединили свои точки вместе? Или у вас есть какое-то другое упрощение?   -  person John Alexiou    schedule 10.05.2011
comment
@ ja72: API рисования ActionScript3 в настоящее время поддерживает только кривые Безье с одной контрольной точкой. Настоящие кривые Безье с двумя контрольными точками появятся во Flash Player 11.   -  person Chunky Chunk    schedule 10.05.2011
comment
@ ja72: конечно, только если вы используете API рисования, а не создаете свои собственные кривые.   -  person Chunky Chunk    schedule 10.05.2011
comment
да, r1 - это средняя точка, вы можете использовать от 2 до n точек для кривых Безье, если я прав   -  person user745739    schedule 10.05.2011


Ответы (2)


Посмотрите документацию Asymptote (здесь), в которой геометрическая интерпретация а-сплайна. Для средней точки (t=-.5) точка лежит в точке m_5 ниже. Если вы используете одну контрольную точку, то c_0 и c_1 совпадают, что упрощает математику. Если при (t = 0,5) ваши значения y равны y_c, а начальное и конечное значения соответственно z_0 и z_1, то контрольная точка находится в точке

c = (8*y_c-z_0-z_1)/6

Сделайте то же самое для значений x.

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

person John Alexiou    schedule 09.05.2011
comment
я понимаю, что вы говорите, но я не могу понять 8 и 6 в этом уравнении, где вы их взяли?! :/ - person user745739; 10.05.2011
comment
от y = z_0 (1-t)^3 + c_0 * 3*(1-t)^2*t + c_1 * 3*(1-t)*t^2 + z_1*t^3 с c = c_0 = c_1 и y(t=0.5)=y_c. - person John Alexiou; 10.05.2011

Посмотрите вопрос, который я задал пару дней назад: По заданной линейной функции f(x), как получить квадратичную контрольную точку Безье. Я думаю, это именно то, что вам нужно.

person Alan Rynne    schedule 24.06.2013