Domanda

Utilizzare più curve di Bezier Java 2D ho rattoppato (CubicCurve2D) insieme per creare un "blob". Il problema che ora ad affrontare è come:

  1. efficiente riempire il blob con un determinato colore.
  2. 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 PathIterators 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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top