1

我无法弄清楚如何实现以下要求:

允许用户绘制由一堆点(我有)组成的任意 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。

所以问题是是否有人知道如何实现这一目标。或者可能是更好的算法或示例。那会很好。非常感谢。

4

0 回答 0