Non penso che sia necessaria l'interpolazione 3D (triscateredinterp). Hai dati basati su input 2D; la terza dimensione è il tuo risultato. Se ho capito bene, vuoi fornire un punto in 2D (qualcosa tra i punti originali e interpolare il valore
Peso leggero "vicino più vicino", quindi interpolazione bi-lineare, quindi bi-cubico (e altri). il primo è semplice, gli altri richiedono una quantità crescente di matematica
Bi-lineare:. per ogni punto da interpolare, trovare la più vicina 3 punti al vostro X e Y:
lat long Altitude
X1 Y1 A1
X2 Y2 A2
X3 Y3 A3
fare queste matrici :
X1 Y1 1 A1
X = X2 Y2 1 Y = A2
X3 Y3 1 A3
B sono i coefficienti di interpolazione ti calcolare per questi tre punti più vicini (e possono essere riutilizzati per tutti i punti dell'area)
B1
B = B2
B3
L'equazione matriciale è: X*B = Y
Si potrebbe usa brut force: Moltiplica entrambi i lati per XT: XT*X*B = XT*Y
Prendi l'inverso di XT * X: B = (XT*X)^-1 *XT*Y
.
Sì inversione matrice 3x3. Legando questo a una domanda in C++, potresti usare Boost per le tue operazioni con le matrici.
Ecco un altro simile C domanda ++: Solving a system of equations programmably?
Un problema che può sorgere dalla tecnica bi-lineari è che, come il vostro punto interpolato diventa più vicino a un diverso insieme di 3 valori è possibile ottenere alcuni salti (come sarebbe intercolli 4 punti in una configurazione a sella?)
l'altitudine dei dati su un ingresso 2D? si trova su una griglia regolare o dispersa? – Michael
Ho punti 3D sparsi. I miei dati sono altitudine. – mitjap
e vuoi dare un valore ** 2D ** e interpolare l'altitudine? – Michael