|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 608
|
[PHP] Calcolo punti di controllo per spline bicubica (Bezier): help.
Ciao, avrei bisogno di un aiuto circa un problema che forse è più matematico che di programmazione....spero che possiate aiutarmi a capire.
La premessa: ho una serie di punti (di cui conosco le coordinate) in un grafico cartesiano e dovrei collegarli non con linee rette, ma bensì tramite una curva spline bicubica o di Bezier che passi per i punti stessi. Dispongo già di una funzione PHP di disegno su file PDF che genera una curva di Bezier fra due punti (la chiamo semicurva, poi capirete il motivo), accettando come input le coordinate dei due punti estremi della semicurva e le coordinate dei due punti di controllo (quello iniziale e quello finale). Il problema, per me, è proprio quello di calcolare le coordinate dei punti di controllo, in modo tale che la successione delle semicurve costituiscano un'unica curva di Bezier fluida che passa per i punti stessi. Alcuni dettagli da tenere conto sono: - Il primo punto e l'ultimo punto della serie non possono avere il punto di controllo. - Il secondo punto di controllo di ogni semicurva deve essere collineare al primo punto di controllo della semicurva successiva, per far sì che la curva finale risultante sia fluida. Ho trovato molte fonti in rete riguardo l'interpolazione (o approssimazione) di curve con spline bicubiche o Bezier, ma non essendo io un matematico non riesco a capirci quasi nulla. Inoltre tutto il materiale che ho trovato spiega, dal punto di vista matematico, come calcolare tutti i punti interpolati per generare la curva di Bezier, mentre io ho già una funzione di disegno che si occupa di fare questo e mi serve soltanto calcolare le coordinate dei punti di controllo di ogni semicurva. Quancuno riesce a spiegarmi come ottengo questo calcolo oppure può segnalarmi qualche fonte dove trovare del codice che esegua questa operazione? Anche se non è codice PHP non importa, posso trasportarlo. Grazie a chiunque sappia darmi una mano
__________________
Intel Core2Quad Q6600 2,4GHz @ 3,0 GHz 2 Gb RAM 667 MHz ATI HD2900XT |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Le curve di bezier non passano attraverso i punti che definisci, ci passano solo vicino; inoltre i punti di controllo possono essere posizionati arbitrariamente per deformare la curva, questa resterà comunque "tonda", non presenta angoli.
Se invece vuoi che la curva passi attraverso i tuoi punti, allora una spline fa al caso tuo, inoltre non necessita di punti di controllo, risolvendo il problema a priori. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 608
|
Giusto, allora le spline sono la soluzione al mio problema.
Hai qualche risorsa comprensibile che io possa consultare per avere indicazioni su come gestirle ed implementarle nel codice?
__________________
Intel Core2Quad Q6600 2,4GHz @ 3,0 GHz 2 Gb RAM 667 MHz ATI HD2900XT |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Personalmente non ho mai trattato con le spline da programmatore, però cercando su google trovi diverse librerie in php, scegli quella che trovi più comoda.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 608
|
Eh, ma il problema è proprio quello: ho cercato il materiale online, ma ho trovato sempre solo le spiegazioni matematiche di come funzionano e non ho mai trovato librerire di funzioni già pronte, soprattutto per php.
Hai qualche link a portata di mano per caso?
__________________
Intel Core2Quad Q6600 2,4GHz @ 3,0 GHz 2 Gb RAM 667 MHz ATI HD2900XT |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Basta cercare su google "spline php" (senza virgolette) e trovi una lunga lista.
Questo risultato sembra molto promettente: http://www.script-tutorials.com/smoo...th-php-and-gd/ Hai delle classi già pronte per disegnare spline tramite GD, il codice sorgente è abbastanza breve e se ne hai bisogno puoi facilmente estrarre solo ciò che ti serve. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:03.



















