Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[Java] Poligono ad alta risoluzione

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto UtenteMassimoB, Foto Utentefairyvilje

0
voti

[1] [Java] Poligono ad alta risoluzione

Messaggioda Foto UtenteDarwinNE » 10 apr 2012, 20:47

Ciao a tutti,
attualmente, all'interno di FidoCadJ, utilizzo un poligono (classe java.awt.Polygon) per memorizzare alcuni risultati intermedi nella primitiva di curva spline cubica che sta venendo fuori per la versione 0.24.
Si tratta di un poligono con molti lati con cui ho bisogno di una certa precisione e lo uso per l'esportazione verso i formati grafici supportati da FidoCadJ (una gran comodità, sebbene sicuramente sub ottimale). Mi sembra che java.awt.Polygon contenga solo una versione con coordinate intere, mentre io avrei bisogno di maggior risoluzione. Quale potrebbe essere un modo comodo per contornare la difficoltà? Derivo una classe Polygon2D da quella standard? Lascio perdere il tutto e mi creo una mia classe per gestire la cosa?

Thanks O_/
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
25,5k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3597
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

0
voti

[2] Re: [Java] Poligono ad alta risoluzione

Messaggioda Foto Utenteangus » 11 apr 2012, 13:12

Io non so quasi nulla di Java, ma credo che la risposta alla tua domanda sia usare Path2D, come spiegato molto bene qui: http://www.java.net/node/669610
O_/
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
7.786 4 6 8
G.Master EY
G.Master EY
 
Messaggi: 3572
Iscritto il: 20 giu 2008, 17:25

0
voti

[3] Re: [Java] Poligono ad alta risoluzione

Messaggioda Foto Utentedadodj » 12 apr 2012, 3:44

Sarebbe perlopiù sbagliato ereditare la vecchia.. e poi potresti trovarti in qualche errore se la eredi da quella ad interi e la modifichi.. ti converrebbe prenderla e rifarla a scopo copiando la struttura (ma utilizzando dei double a quanto ho capito .. ) ;
comunque il problema si pone dopo perché con i double fare confronti è altamente instabile.. non so se devi fare il controllo se è all'incirca nel raggio di 3,5 hai un sacco di questi altri problemi
potresti però mmm ereditare quella e riscrivere tutto aggiungendo parametri x_decimale e y_decimale interi inizialmente a 0 così almeno puoi fare un controllo sempre sugli interi più rapido veloce Boh..
è solo un'idea :S

comunque credo che la soluzione sia quella Path2 anche se non la conosco
Avatar utente
Foto Utentedadodj
45 1 2
New entry
New entry
 
Messaggi: 87
Iscritto il: 18 lug 2011, 23:14

4
voti

[4] Re: [Java] Poligono ad alta risoluzione

Messaggioda Foto Utenteposta10100 » 12 apr 2012, 22:09

Ciao Davide,
come ti è stato già detto, e come tu ben sai, i double sono tanto comodi quanto infidi... l'errore di approssimazione è sempre dietro l'angolo!

Se hai bisogno solo di memorizzare i punti ti conviene fare una semplicissima classe FidoPoint
Codice: Seleziona tutto
public class FidoPoint {
  public double x,y;
}


e poi salvi le coordinate in un vettore
Codice: Seleziona tutto
Vector<FidoPoint> fidoPointVector = new Vector<FidoPoint>();


oppure usi un semplicissimo vettore
Codice: Seleziona tutto
Vector<Double[]> fidoPointVector = new Vector<Double[]>();

Quest'ultimo molto più veloce in fase di esecuzione.

Se invece conosci il numero di punti allora puoi usare un array doppio, così ti togli di torno il vettore e guadagni in prestazioni.

Se i punti sono davvero tanti, incrocia le dita: il garbage collector è un po pigro...

O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.465 4 9 13
Master EY
Master EY
 
Messaggi: 4802
Iscritto il: 5 nov 2006, 0:09

1
voti

[5] Re: [Java] Poligono ad alta risoluzione

Messaggioda Foto UtenteDarwinNE » 12 apr 2012, 22:49

Allora, ringrazio quelli che hanno risposto: Foto Utenteangus, Foto Utentedadodj e Foto Utenteposta10100.
Conosco bene la questione degli errori di approssimazione ed il problema di quando considerare identici due valori in virgola mobile (dopotutto, vengo dal calcolo numerico). Il problema è che in qualche caso gli interi sono davvero troppo crudi. Provate FidoCadJ 0.24 alpha, la versione preliminare che ho descritto qui:

viewtopic.php?f=4&t=18347&start=430#p292898

Introducete una bella curva, con la nuova primitiva, e poi provate ad esportare il disegno in pdf, vedrete i contorni della curva scalettati, perché questa è resa con un poligono e la risoluzione non è sufficiente. Ci sono dei metodi più efficienti per fare il rendering di una spline, ma il poligono ha almeno il vantaggio non indifferente di non costringermi a ristudiare tutti i dettagli di tutti i formati grafici (EPS, PDF, SVN e compagnia...).

Alla fine, penso che farò esattamente come ha suggerito Foto Utenteposta10100.
Follow FidoCadJ development on Twitter: https://twitter.com/davbucci
Avatar utente
Foto UtenteDarwinNE
25,5k 5 11 13
G.Master EY
G.Master EY
 
Messaggi: 3597
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti