Algoritmo interpolazione 3d
Salve a tutti,
il mio problema e' il seguente: Ho un insieme di punti Xi,Yi,Zi (con i=0...i=n). Possiamo vedere questi punti come
una superficie nello spazio, e la sua rappresentazione non e' importante, puo' essere una matrice o 3 vettori.
Io ho bisogno di una interpolazione 3d (il metodo dell'interpolazione puo' essere spline, polinomiale ecc ecc)
che mi permetta di sapere la Zk (per k!=n) di un dato Xk, Yk (per k!=n).
Qualcuno ha una qualche idea di libreria gia' pronta c++ o di algoritmo di facile implementazione?
Grazie a tutti della cortese attenzione
il mio problema e' il seguente: Ho un insieme di punti Xi,Yi,Zi (con i=0...i=n). Possiamo vedere questi punti come
una superficie nello spazio, e la sua rappresentazione non e' importante, puo' essere una matrice o 3 vettori.
Io ho bisogno di una interpolazione 3d (il metodo dell'interpolazione puo' essere spline, polinomiale ecc ecc)
che mi permetta di sapere la Zk (per k!=n) di un dato Xk, Yk (per k!=n).
Qualcuno ha una qualche idea di libreria gia' pronta c++ o di algoritmo di facile implementazione?
Grazie a tutti della cortese attenzione

Risposte
Il tuo problema non è molto chiaro e i metodi esistenti hanno tutti proprietà e richieste anche molto diverse tra di loro. Come sono disposti questi punti? Una sequenza di punti rappresenta al massimo una curva e non una superficie. Devi quindi chiarire tra quali e quanti punti vuoi eseguire l'interpolazione. I punti appartengono alla superficie?
hai ragione, chiedo scusa, presento piu' chiaramente il problema.
Io ho una insieme di punti, ti faccio un esempio pratico che ho fatto con matlab:

Ho messo sia la vista matriciale sia la vista a sequenza di punti. L'ideale sarebbe una libreria o un algoritmo per l'interpolazione spline,
per sapere la "Z" di un punto generico (1,5 - 1,5) interno ovviamente all'intervallo.
Se mi sono ancora spiegato male, sono qui per chiarimenti
Ti ringrazio dell'interessamento.
p.s. i punti sono sempre disposti per essere a "quadrati".. . Anche se avessi cioe' molti piu punti esempio matrice 10x10 o 100x100
le x e le y sarebbe sempre le righe e le colonne appunto della matrice. 0----n. Credo si dica che le x e le y sono equidistanti e uniformi.
Io ho una insieme di punti, ti faccio un esempio pratico che ho fatto con matlab:

Ho messo sia la vista matriciale sia la vista a sequenza di punti. L'ideale sarebbe una libreria o un algoritmo per l'interpolazione spline,
per sapere la "Z" di un punto generico (1,5 - 1,5) interno ovviamente all'intervallo.
Se mi sono ancora spiegato male, sono qui per chiarimenti

Ti ringrazio dell'interessamento.
p.s. i punti sono sempre disposti per essere a "quadrati".. . Anche se avessi cioe' molti piu punti esempio matrice 10x10 o 100x100
le x e le y sarebbe sempre le righe e le colonne appunto della matrice. 0----n. Credo si dica che le x e le y sono equidistanti e uniformi.
Credo che le tecniche più comuni siano attraverso superfici di Bézier o superfici spline. Non hai ancora chiarito comunque quali siano le caratteristiche che questa superficie deve avere: i punti sono sulla curva o ne definiscono solo la forma? Quanti punti definiscono un singolo punto sulla curva (solo i quattro adiacenti o molti di più)? Vuoi una superficie differenziabile di che classe (ti basta $C^0$ oppure la vuoi almeno $C^1$...)? Per cosa devi usare questa superficie?
Penso che la soluzione piu' semplice per risponderti sia spiegarti interamente il problema.
Allora io ho una macchina pick and place (macchina con 2 assi x,y e una testa che si muove nel piano).
Ora il problema e' il seguente: A causa di problemi fisico-meccanici quando uno dice alla macchina di andare in 20,20,la testa della macchina fa'
per ovvi motivi un errore, andra' cioe' in 20.8 , 19.6. Quindi e' necessario "mappare" il piano, come si fa questa operazione?
Si dice alla macchina di andare in una serie di punti esempio 1,1 1,2 1,3.........2,1 2,2 ecc... Per ogni punto si vede quale e' l'errore Dx,Dy tramite
librerie di visione e algoritmi ecc..
A questo punto abbiamo una matrice di punti dove la macchina e' andata 1,1 1,2 ecc.... e per ogni punto abbiamo un Dx,Dy che si deve dare per far
diventare la macchina precisa. Per ovvie ragioni non si puo' andare in OGNI punto in cui la macchina dovra' andare perche servirebbero circa 4 anni e mezzo per mappare tutto il piano.
Scegliamo quindi una serie di punti a discrezione esempio una matrice 10x10 (cioe 100 punti) e si ottengono 2 matrici 10x10 ognuna delle quali contentente le correzioni
Dx e Dy per ogni punto.
Ora restringiamo l'esempio ad un asse solo, prendiamo esempio i Dx.. io ho una matrice 10x10 contentente i 100Dx per quei punti. Bene e se invece di andare in 1,1 volessi andare con la macchina in 1.2, 1.2 , quale Dx devo dare alla macchina per essere precisa?
Spero di essere stato sufficientemente chiaro e aspetto con ansia la risposta. Non ho limiti di strumenti da utilizzare se secondo te c'e' un modo migliore per fare questo, ben venga
Grazie.
Allora io ho una macchina pick and place (macchina con 2 assi x,y e una testa che si muove nel piano).
Ora il problema e' il seguente: A causa di problemi fisico-meccanici quando uno dice alla macchina di andare in 20,20,la testa della macchina fa'
per ovvi motivi un errore, andra' cioe' in 20.8 , 19.6. Quindi e' necessario "mappare" il piano, come si fa questa operazione?
Si dice alla macchina di andare in una serie di punti esempio 1,1 1,2 1,3.........2,1 2,2 ecc... Per ogni punto si vede quale e' l'errore Dx,Dy tramite
librerie di visione e algoritmi ecc..
A questo punto abbiamo una matrice di punti dove la macchina e' andata 1,1 1,2 ecc.... e per ogni punto abbiamo un Dx,Dy che si deve dare per far
diventare la macchina precisa. Per ovvie ragioni non si puo' andare in OGNI punto in cui la macchina dovra' andare perche servirebbero circa 4 anni e mezzo per mappare tutto il piano.
Scegliamo quindi una serie di punti a discrezione esempio una matrice 10x10 (cioe 100 punti) e si ottengono 2 matrici 10x10 ognuna delle quali contentente le correzioni
Dx e Dy per ogni punto.
Ora restringiamo l'esempio ad un asse solo, prendiamo esempio i Dx.. io ho una matrice 10x10 contentente i 100Dx per quei punti. Bene e se invece di andare in 1,1 volessi andare con la macchina in 1.2, 1.2 , quale Dx devo dare alla macchina per essere precisa?
Spero di essere stato sufficientemente chiaro e aspetto con ansia la risposta. Non ho limiti di strumenti da utilizzare se secondo te c'e' un modo migliore per fare questo, ben venga

Grazie.
Il metodo più semplice è quello di usare una interpolazione bilineare (quella che nell'immagine hai chiamato come lineare). A seconda della precisione richiesta può essere sufficiente o meno. Mi sembra chiaro che quei punti fanno parte della tua superficie e quindi superfici di Bézier o B-spline non sono adatte. In questo momento non mi viene in mente niente di particolare, ci penso un po' e ti faccio sapere.