NSBezierPath / línea de intersección / aplanar
-
21-09-2019 - |
Pregunta
Actualmente estoy portar mi solicitud jruby / Java2D Graph Drawing / Layouting a MacRuby / cacao. Por lo tanto necesito para obtener el punto de intersección NSBezierPath abierta con un NSBezierPath cerrado.
En Java2D que utiliza el siguiente truco. I aplané ambos caminos y no un simple análisis de intersección de líneas para cada segmento.
Entonces, ¿hay una forma sencilla de convertir un NSBezierPath a un montón de líneas rectas?
Mi algoritmo actual simplemente camina la línea (de un modo de búsqueda binaria) hasta que encuentre un NSPoint para los que containsPoint es cierto. Pero sólo funciona para las líneas rectas. La que he implementado en Java2D trabajó para trayectorias curvas también.
def getIntersection edge, path
out = edge.source
ins = edge.target
until (out.dist(ins) < 1.0)
mid = out + ((ins - out) * 0.5)
if (path.containsPoint (NSMakePoint(mid.x, mid.y)))
ins = mid
else
out = mid
end
end
return out
end
Solución
Entonces, ¿hay una forma sencilla de convertir un NSBezierPath a un montón de líneas rectas?
Enviar la ruta de un mensaje bezierPathByFlatteningPath
. Esto devolverá un nuevo camino, por lo que convertido.