NSBezierPath / linea di intersezione / appiattire
-
21-09-2019 - |
Domanda
Al momento sto porting mia Java2D applicazione JRuby / Grafico Disegno / interfaccia grafica per MacRuby / cacao. Perciò devo ottenere il punto di intersezione di una NSBezierPath aperto con un NSBezierPath chiuso.
In Java2D ho usato il seguente trucco. I appiattito entrambi i percorsi e ha fatto un semplice test linea di intersezione per ogni segmento.
Quindi, c'è un modo semplice per convertire un NSBezierPath a un gruppo di linee rette?
Il mio algoritmo corrente passeggiate semplicemente la linea (in modo binario di ricerca) fino a trovare una NSPoint per il quale containsPoint è vero. Ma funziona solo per le linee rette. Quello che ho implementato in Java2D lavorato per percorsi curvi troppo.
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
Soluzione
Quindi, c'è un modo semplice per convertire un NSBezierPath a un gruppo di linee rette?
Invia il percorso un messaggio bezierPathByFlatteningPath
. Ciò restituirà un nuovo percorso, quindi convertito.