我无法弄清楚如何实现以下要求:
允许用户绘制由一堆点(我有)组成的任意 UIBezierPath,它看起来像这样:
现在我需要能够删除曲线的任何交点。所以最后我得到如下结果:
但是我需要帮助弄清楚如何做到这一点。首先,我尝试了与此类似的代码(警告:这只是一个测试,它甚至可能不正确或可能崩溃)。
-(void)splitPaths:(NSMutableArray *)sourcePoints paths:(NSMutableArray *)paths
{
NSLog(@"Splitting points: %d",sourcePoints.count);
for(int i= 0; i < sourcePoints.count ; i++)
{
CGPoint pointOne = [[sourcePoints objectAtIndex:i] CGPointValue];
for(int j= i+1; j< sourcePoints.count; j++)
{
CGPoint pointTwo = [[sourcePoints objectAtIndex:j] CGPointValue];
if(CGPointEqualToPoint(pointOne, pointTwo))
{
NSRange initialRange = NSMakeRange(0, i);
NSRange pathRange = NSMakeRange(i, j - i);
NSRange finalRange = NSMakeRange(j, sourcePoints.count - 1);
NSArray *firstArray = [sourcePoints subarrayWithRange:initialRange];
NSArray *pathArray = [sourcePoints subarrayWithRange:pathRange];
NSArray *finalArray = [sourcePoints subarrayWithRange:finalRange];
[paths addObject:pathArray];
NSMutableArray *remainingPoints = [NSMutableArray arrayWithArray:[firstArray arrayByAddingObjectsFromArray:finalArray]];
[self splitPaths:remainingPoints paths:paths];
}
}
}
}
这是一个递归函数,它将分割曲线的每个“段”。希望您能了解我正在尝试做的事情......但是,我似乎没有足够准确的点来让 CGPointEqualToPoint 返回 YES。
所以问题是是否有人知道如何实现这一目标。或者可能是更好的算法或示例。那会很好。非常感谢。