次の要件を実装する方法がわかりません。
ユーザーは、一連のポイント (私が利用可能です) から作成された任意の 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を返すのに十分な正確さを持っていないようです。
したがって、問題は、これを達成する方法について誰かがアイデアを持っているかどうかです。または、より良いアルゴリズムまたは例かもしれません。それは素晴らしいことだ。どうもありがとう。