Ich habe einen Vektor von Samples, die eine Kurve bilden. Stellen wir uns vor, dass es 1000 Punkte gibt. Wenn ich es strecken möchte, um 1500 Punkte zu füllen, was ist der einfachste Algorithmus, der ordentliche Ergebnisse liefert? Ich suche nach etwas, das nur ein paar Zeilen C / C ++ ist.
Ich werde immer die Größe des Vektors erhöhen wollen, und der neue Vektor kann zwischen dem 1,1-fachen und dem 50-fachen der Größe des aktuellen Vektors liegen.
Danke!
Hier ist C ++ für lineare und quadratische Interpolation.
interp1( 5.3, a, n )
ist a [5] + .3 * (a [6] - a [5]), .3 des Weges von a [5] nach a [6];
interp1array( a, 1000, b, 1500 )
würde a
auf b
strecken.
interp2( 5.3, a, n )
zeichnet eine Parabel durch die 3 nächsten Punkte a [4] a [5] a [6]: glatter als interp1 aber immer noch schnell.
(Splines verwenden 4 nächste Punkte, noch glatter; wenn Sie Python lesen, siehe
basic-spline-interpolation-in-ein-paar- Zeilen-von-Numpy .
Was ist der einfachste Algorithmus, der anständige Ergebnisse liefert?
Catmull-Rom-Splines. (wenn Sie eine glatte Kurve wollen)
Verwenden Sie für jedes neue Element die Bruchposition in einem alten Array und verwenden Sie den Bruchteil (f - floor (f)) als Interpolationsfaktor und den "Ganzzahl" (dh Floor (f)) -Teil, um die nächsten Elemente zu finden.
Dies setzt voraus, dass Sie mit Daten arbeiten, die mathematisch interpoliert werden können (Gleitkommazahlen). Wenn Daten nicht interpoliert werden können (Strings), ist die einzige Lösung, das nächste verfügbare Element des alten Arrays zu verwenden.
Sie müssen etwas optimieren, wenn die Punkte im Array nicht gleichmäßig verteilt sind.
Tags und Links algorithm interpolation curve-fitting