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
二次曲线就是一条曲线。不可能获得其上所有点的列表,因为有无限多个点,而且它不是一条简单的线段。
有关可用于查询对象的函数列表,请参阅获取有关 Quartz 路径的信息CGPath。不幸的是,您将获得的最有用的信息似乎是 with CGPathContainsPoint(),它仅告诉您给定点是否包含在路径区域内。
| 归档时间: |
|
| 查看次数: |
8040 次 |
| 最近记录: |