Как создать CGPoint-Array из UIBezierPath (чтобы прикоснуться к объекту по заданному пути) [duplicate]

This question already has an answer here:

Drag UIView around Shape Comprised of CGMutablePaths 1 answer

У меня есть UIBezierPath (изогнутый как '8', с только 4 точками в нем), и мне нужно сделать из него какой-нибудь массив CGPoint. Есть идеи? спасибо!

редактировать:

У меня есть такой Безье

-(void) initBezier
{
    theBezierPath = [UIBezierPath bezierPath];    
    [theBezierPath moveToPoint:P(211.00, 31.00)];
    [theBezierPath addCurveToPoint:P(870.00, 191.00) controlPoint1:P(432.00, -11.00) controlPoint2:P(593.00, 209.00)];
    [theBezierPath addCurveToPoint:P(731.00, 28.00) controlPoint1:P(1061.95, 178.53) controlPoint2:P(944.69, 5.78)];
    [theBezierPath addCurveToPoint:P(189.00, 190.00) controlPoint1:P(529.00, 49.00) controlPoint2:P(450.00, 189.00)];
    [theBezierPath addCurveToPoint:P(211.00, 31.00) controlPoint1:P(-33.01, 190.85) controlPoint2:P(71.00, 37.00)];
}

и я оживляю объект на нем

anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"];
anim.path = theBezierPath.CGPath;
anim.calculationMode = kCAAnimationCubicPaced;
anim.repeatCount = HUGE_VALF;
anim.duration = tme;

Я хочу анимировать объект на пути пиксель за пикселем (через позицию касания). Я хочу, чтобы объект "защелкнулся" заданная координата прикосновения к ближайшей точке кривой, так что она перемещает объект по траектории.

 Rok Jarc10 июн. 2012 г., 22:26
Так ты ищешь точку на безье, которая ближе всего к точке, к которой ты прикасаешься?Во Вы можете найти обсуждение этой темы. Не пропусти ту ссылку, которую дал Кори. Сначала вы должны найти точку (из исходных точек), наиболее близкую к касанию, - затем используйте левую и правую исходную точку, чтобы получить эту часть кривой, и вы скоро будете на своем пути.
 headkit10 июн. 2012 г., 22:33
Боюсь, но попробую ...
 Rok Jarc10 июн. 2012 г., 22:48
Если у тебя получится, напиши здесь.

Ответы на вопрос(2)

UIBezierPath ниCGPath предоставить способ оценки точек на произвольном пути Безье или способ найти ближайшую точку на пути. Вам придется написать этот код самостоятельно.

К счастью, это очень хорошо изученная тема. Это учебник имеет много полезной информации, чтобы вы начали. Вас интересуют кривые Безье "кубического" или "третьего порядка".

 Kurt Revis10 июн. 2012 г., 22:08
Если вы ищете немного, вы сможете найти какой-нибудь код, чтобы попробовать. Это не так сложно, как кажется. Вот один пример.
 headkit10 июн. 2012 г., 22:31
Я попробую - спасибо!
 headkit10 июн. 2012 г., 22:00
ai карамба! выглядит красиво, но я знаю, что я никогда не смогу пройти через эту математическую гору какой-то полезный код. но спасибо за подсказку!

CGPathApply()ункция @ для перебора всех элементов пути. В качестве одного из аргументов вы должны указать указатель на функцию, которая затем будет вызываться для каждого элемента пути. Структура данных элемента пути (типаCGPathElement) затем содержит точку (и), которые ее описывают.

ИспользуйтеNSValue как обертка для добавления точек кNSMutableArray.

 headkit10 июн. 2012 г., 19:14
CGPathApply () просто вернет точки, которые я использовал для создания пути. это мне не поможет ...: -
 Ole Begemann10 июн. 2012 г., 19:59
Что тогда нужно, если не точки, которые вы использовали для создания пути?
 headkit10 июн. 2012 г., 20:58
Я отредактировал свой вопрос, пытаясь быть более точным ...

Ваш ответ на вопрос