Esto es bastante antiguo, pero lo encontré en busca de una solución similar, en mi problema que quería encontrar un círculo cuando se superpuso con una trayectoria (un caso especial de su pregunta).
Lo resolví usando CGPathCreateCopyByStrokingPath
para crear una versión trazada de la ruta original utilizando el radio del círculo como el ancho de trazo. Si el punto central del círculo se superpone con el trazado contorneado, el camino original se superpone al círculo.
BOOL CGPathIntersectsCircle(CGPathRef path, CGPoint center, CGFloat radius)
{
CGPathRef fuzzyPath;
fuzzyPath = CGPathCreateCopyByStrokingPath(path, NULL, radius,
kCGLineCapRound,
kCGLineJoinRound, 0.0);
if (CGPathContainsPoint(fuzzyPath, NULL, center, NO))
{
CGPathRelease(fuzzyPath);
return YES;
}
CGPathRelease(fuzzyPath);
return NO;
}
Editar: Un error menor que el fuzzyPath no fue puesto en libertad.
discusión relevante: http://www.cocoabuilder.com/archive/cocoa/65568-determing-the-intersection-of-two-nsbezierpath.html – Chuck
¿Hay restricciones adicionales sobre sus datos? Por ejemplo, ¿se ha limitado a Beziers, o posiblemente incluso a un solo tipo de Bezier? – Tommy
No, a partir de ahora estoy considerando CGPath. Si requiero el camino de Bezier, lo usaría. Pero supongo que, si tuviéramos para CGPaths, entonces no sería difícil para los caminos Bezier. – Ilanchezhian