gpt4 book ai didi

iphone - 如何获取 CGPath 曲线或四边形曲线中的所有点

转载 作者:行者123 更新时间:2023-12-03 16:02:07 25 4
gpt4 key购买 nike

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

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

如果没有,您是否有任何其他解决方案来以数学方式检索曲线中的所有点。

提前致谢,瓦姆希

最佳答案

您可以使用三次贝塞尔曲线的 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!

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

关于iphone - 如何获取 CGPath 曲线或四边形曲线中的所有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com