Вы можете сделать это, используя библиотечную процедуру wykobi C ++ для кубических кривых Безье. Библиотека Уикоби также поддерживает квадратичные кривые Безье.
Конечно, как кто-то указал, вы не хотите, чтобы все очки (хотя и не невозможные, это заняло бы бесконечное время :). Wykobi позволяет легко получить определенное количество точек - если ваши начальные, c1, c2 и конечные точки (где c1, c2 - контрольные точки) в точности совпадают с теми, которые даны CGContextAddCurveToPoint, то точки будут лежать идеально на линии, нарисованной основной графикой - так вы можете сделать такие вещи, как нарисовать узор в нескольких точках пути.
См .: http://www.codeproject.com/Articles/22568/Computational-Geometry-C-and-Wykobi
Кроме того, после того, как я начал использовать wykobi, я услышал, что есть похожая, может быть, даже лучшая библиотека, которая является частью Boost, но еще не проверил ее.
Я создал C ++ Class WPoint как мост между точками wykobi и CGPoints (удовольствие C ++!). Вот некоторый код (без WPoint, но вы можете представить, что он точно такой же, как CGPoint, поэтому, если вы сделаете правильный бросок, вы сможете легко конвертировать.
NSMutableArray* result = [[NSMutableArray alloc] init];
wykobi::cubic_bezier<CGFloat,2> bezier;
bezier[0] = (WPoint)p1; // start point, in CG we did a CGMoveToPoint
bezier[1] = (WPoint)b1i; // control 1
bezier[2] = (WPoint)b2i; // control 2
bezier[3] = (WPoint)p2; // end point
std::vector<WPoint> point_list;
int numPoints = p2.dist(p3) * pointDensity;
// *** here's the magic ***
wykobi::generate_bezier(bezier,std::back_inserter(point_list), numPoints);
for (int i=0; i<numPoints; i++) {
CGPoint p = (CGPoint)(point_list[i]);
[result addObject:[NSValue valueWithCGPoint:p]];
}
// result has your points!
Вот ссылка на библиотеку геометрии Boost:
http://www.boost.org/doc/libs/1_47_0/libs/geometry/doc/html/geometry/introduction.html