Creazione di una forma composita in Java 2D
Domanda
Utilizzare più curve di Bezier Java 2D ho rattoppato (CubicCurve2D
) insieme per creare un "blob". Il problema che ora ad affrontare è come:
- efficiente riempire il blob con un determinato colore.
- efficiente determinare se un dato punto si trova all'interno del blob.
Ho notato CubicCurve2D
thst implementa Shape
che fornisce numerosi metodi per la determinazione contains
"interiorità" e che Graphics2D
è in grado di riempire un Shape
tramite il fill(Shape)
(che credo utilizza metodi Shape
di getPathIterator
per fare questo).
Dato questo speravo che potrei creare un Shape
composita, per cui il mio metodo getPathIterator(AffineTransform)
sarebbe semplicemente collegare i PathIterator
s sottostanti insieme. Tuttavia, questo sta producendo una NoSuchElementException
una volta la mia forma contiene più di un CubicCurve2D
. Anche se riescono a raggiungere questo obiettivo non sono convinto che funzionerà come previsto a causa di un CubicCurve2D
è sempre pieno sul lato convesso, e la mia "blob" è composto da curve concave e convesse. "Contiene" problema è ancora più difficile da un punto può legittimamente essere compresa nel blob ma non in nessuna delle singole curve.
- Sto avvicinando questo problema in modo corretto (cercando di attuare
Shape
?) O c'è un modo idiomatico per fare questo che io sono a conoscenza di? Avrei pensato che il problema della composizione forme geometriche sarebbe abbastanza comune. - Qualcuno ha qualche suggerimento su come risolvere questo problema?
Grazie in anticipo.
Soluzione
Non sono sicuro di aver capito la tua domanda, ma forme composite può essere creato con la classe java / AWT / geom / Area .
Altri suggerimenti
Cercando di Shape per una soluzione è il modo giusto per andare su questo. Se si dispone di un insieme di curve che si sta tentando di assemblare in una forma, vorrei suggerire di utilizzare un GeneralPath. Basta aggiungere le curve, o segmenti di linea retta, come richiesto. Guardate l'interfaccia per vedere i vari metodi di accodamento. Si noti inoltre che si puo 'completo' la forma unendo l'ultimo punto al punto di partenza.
Una volta che il percorso è chiuso, ci sono una serie di diverse versioni di contains () che possono essere utilizzati, si prega di prendere il tempo di leggere ciascuno di loro descrizioni, in quanto vi sono compromessi in termini di velocità e precisione, dipende dell'applicazione in uso.
Inoltre è facile da ottenere una forma dal percorso, e riempirlo, trasformarlo, ecc.