2011-12-19 7 views
7

У меня UIBezierPath в приложении. Когда распознается палец на пути, я хочу разбить эту кривую и сохранить две кривые на двух разных объектах. Таким образом, координаты касания будут работать как конечная точка для одной кривой и начальной точки для второй кривой.Как подразделить UIBezierPath и сохранить его в двух разных объектах

Опять же, если я касаюсь любой из этой кривой, эта кривая будет разделена на две другие кривые и так далее.

Я искал это много. Но найти хорошее решение не удалось.

Также у меня нет идеи, если есть какой-либо другой способ сделать это. Любая помощь будет принята с благодарностью. Thanks

+0

Я нашел одну ссылку. Посмотрите на этих парней. Я думаю, что это может помочь мне разделить beziercurve.http: //www.genie-meca.ac-aix-marseille.fr/Productique/PDF/361_deCasteljau_john.pdf – Harsh

+2

Это может быть или не быть полезным, но показывает вам, как разбить UIBezierPath на его отдельные пути: http://stackoverflow.com/questions/3051760/getting-a-list-of-points-from-a-uibezierpath – titaniumdecoy

ответ

1

Вы можете сделать это с помощью алгоритма de Casteljau. Если вы действительно в математике от него check out the Wikipedia page here, но если вы не то, что в математике это, вероятно, запутать вас больше, чем что-либо, когда на самом деле это довольно просто ...

  1. Вычислить параметризированный значение по кривая (между 0.0 и 1.0) касания. Для этого вы можете рассчитать набор точек через регулярные интервалы (0,1, 0,2, 0,3 и т. Д.), А затем найти две ближайшие точки в ваших точках касания и повторить параметризацию между этими точками, если вы хотите получить большую точность (0,21, 0,22, 0,23 и т. Д.). Это приведет к числу между 0.0 и 1.0 вдоль сегмента кривой, представляющего, где вы касались.
  2. Этот бит трудно объяснить в тексте, но есть хорошая визуализация на this page примерно на полпути вниз под заголовком Разделение кривой Безье. Используйте слайдер под диаграммой, чтобы увидеть, как это работает. Вот мое текстовое объяснение: вам нужно разделить прямые линии между точками управления вашего сегмента кривой, пропорциональные параметризованному значению, которое вы рассчитали на шаге 1. Итак, если вы рассчитали 0,4, вы имеют четыре точки (A, B, C, D) плюс разделительную точку на кривой, ближайшей к вашему касанию, на 0.4 вдоль кривой, мы назовем эту точку с раздельной точкой S:
    • Рассчитать временную точку T что на 0,4 вдоль линии в → с
    • Пусть точка А1 быть равна точке А точка B1
    • Вычислить который является 0,4 вдоль линии A B →
    • рассчиты ваются поздняя точка С1, которая составляет 0,4 вдоль линии B1 → Т
    • Пусть точка D1 быть равна точкой разделения S
    • Пусть точка D2 быть равна точкой D
    • Вычислить точку С2, которая является 0,4 вдоль линии С → D
    • Вычислить точку В2, которая составляет 0,4 вдоль линии Т → С2
    • Пусть точка А2 равна точки разделения S

Теперь у вас есть две новые кривые Безье, первая с использованием контрольных точек A1, B1, C1, D1, а вторая с использованием A2, B2, C2, D2.

 Смежные вопросы

  • Нет связанных вопросов^_^