如何获得CGPath曲线或四边形曲线中的所有点

18 iphone cocoa bezier core-animation core-graphics

我使用该方法制作了四条曲线路径CGPathAddQuadCurveToPoint.我完美地完成了这条道路.但是,我想知道参与路径的所有坐标点.

有没有办法检索路径中的所有坐标点?

如果没有,你有任何其他解决方案用于以数学方式检索曲线中的所有点.

提前谢谢,Vamshi

Geo*_* C. 14

您可以使用wykobi C++库例程来实现三次贝塞尔曲线.Wykobi的库也支持二次贝塞尔曲线.

当然,正如有人指出你不想要所有的要点(虽然并非不可能,但它只需要无限的时间:).Wykobi可以轻松获得一定数量的积分 - 如果你的开始,c1,c2和终点(其中c1,c2是控制点)与给予CGContextAddCurveToPoint的那些点完全相同那么这些积分将完美无缺在核心图形绘制的线上 - 所以你可以做一些事情,比如在路径上的几个点画一个图案.

请参阅:http://www.codeproject.com/Articles/22568/Computational-Geometry-C-and-Wykobi

此外,在我开始使用wykobi后,我听说有一个类似的,甚至更好的库是Boost的一部分,但还没有检查出来.

我创建了一个C++类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!
Run Code Online (Sandbox Code Playgroud)

下面是Boost的几何库的链接: http://www.boost.org/doc/libs/1_47_0/libs/geometry/doc/html/geometry/introduction.html


Ada*_*eld 0

二次曲线就是一条曲线。不可能获得其上所有点的列表,因为有无限多个点,而且它不是一条简单的线段。

有关可用于查询对象的函数列表,请参阅获取有关 Quartz 路径的信息CGPath。不幸的是,您将获得的最有用的信息似乎是 with CGPathContainsPoint(),它仅告诉您给定点是否包含在路径区域内。