Möglichst schnelle nichtlineare Interpolation mit 4 Punkten

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

coldie

Betreff: Möglichst schnelle nichtlineare Interpolation mit 4 Punkten

BeitragDi, Jul 03, 2007 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe 4 Quadratisch angeordnete Punkte (P1(-1,1) P2(1,1) P3(-1,-1) P4(1,-1) ), und für jeden Punkt einen Höhenwert. Nun liegt Punkt XY ( PXY(X,Y) ) irgendwo zwischen diesen Punkten und ich bräuchte eine Funktion, die möglichst schnell und rund den Höhenwert für Punkt XY aus dessen Koordinaten und den Höhenwerten der 4 anderen Punkte berechnet. Kann mir jemand eine Methode empfehlen?

Danke schonmal für hilfe Smile
 

ByteCroc

BeitragDi, Jul 03, 2007 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Alle X Werte zusammen zählen und durch 4 teilen ebenso mit Y und Höhenwerten verfahren.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jul 03, 2007 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ByteCroc, das wäre dann der Durchschnitt aller Punkte, keine Interpolation, da jeder Punkt anders ins Gewicht fällt.

coldie, ich glaube dass eine lineare Funktion schon die schnellste ist. Kommt dann nur noch auf die Codeoptimierung an.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

coldie

BeitragMi, Jul 04, 2007 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das glaube ich dir sofort Very Happy
Nur bei einer linearen Funktion sieht es doch dann eckig und kantig aus, das geht gar nicht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Jul 04, 2007 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt! Könnte schwören, dass da als Fragestellung etwas anderes gestanden hatte, oder ich einfach mal ein paar ''Ausfälle'' hatte.

Die einzigen Tipps für andere Filterung die mir so einfallen sind:

- Triangle
- Spline
- Mitchell
- Bi-Cubic

Vielleicht findet man hier und da was dazu.

Ich für mein Geschmack hätte Spline genommen (weil ich die schon so ein bischen kenne). Kann jetzt aber garnicht über die Effektivität und der gleichen dazu sagen. Spline in ihrer Grundform hätte allerdings den Nachteil, dass ''Wellen'' entstehen, wenn starke Ausgleichsmanöver berechnet werden sollen. IrfanView nennt sein Filter dazu ''B-Spline'', welches sicherlich auch ohne ''Wellen'' aus kommt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

coldie

BeitragMi, Jul 04, 2007 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke
Ja Spline kommt mir irgendwie bekannt vor, werd mich da mal schlau machen.
 

Dreamora

BeitragMi, Jul 04, 2007 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Cat-Mul-Rom fehlt da noch ... auch eine Spline Art die jedoch einfacher zu verstehen ist als andere und den vorteil hat das sie durch die 4 punkte geht im unterschied zu kubischen Splines und so.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragMi, Jul 04, 2007 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube es ist nicht möglich eine weiche Kurve da zu interpolieren - denn dazu braucht man 3 Punkte für X und 3 Punkte für Y (so wie ich verstanden habe hast du -1 und +1 - also 2 punkte?)

ansonsten kannst du 2 Punkte immer linear verbinden...
um 3 punkte zu verbinden würde ich catmul-rom-spline empfehlen
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Rone

BeitragMi, Jul 04, 2007 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich check irgendwie nicht ganz wie die punkte zu ner parabel verbinden willst?!
user posted image
kannst du das mal einzeichnen?...oder bin ich grad n bisschen verpeilt...

Normalerweise einfach bedingungen aufstellen:

f(-1) = 1
f(1) = 1
f(1) = -1
f(-1) = 1 => f(x) = ax^2 + bx +c

dann einsetzten/lineares gleichungssystem aufstelen und lösen...
...zack formel fertig! aber die punkte ergeben meiner meinung keinen sinn...
 

coldie

BeitragMi, Jul 04, 2007 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist ja dreidimensional.
Die Punkte haben x y und z Koordinaten. Das hab ich wohl etwas ungenau ausgedrückt. Die x und y Koordinaten sind allerdings bei den vier Punkten fest. Während die z-Koordinate (die Höheninformation ) beliebige Werte annehmen kann.

Das heisst so "von oben" gesehen macht es natürlich keinen Sinn da irgendwas einzuzeichnen.

TheShadow

Moderator

BeitragDo, Jul 05, 2007 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ist denn bei koordinate 0 auch ein Punkt?

wenn nein, dann kannst du keine kurven machen
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jul 05, 2007 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, bei nur zwei Punkten gehts auch. Das währ dann der ''gausischer'' Verlauf. Also ein tangenziales ein- und ausfahren der Graustufen, welcher auch viel besser vom menschlichen Auge als ''natürlicher Verlauf'' war genommen wird, als ein linearer.

Beispiel wie so eine Kurve aussieht:

Code: [AUSKLAPPEN]
Graphics 360,360,0,2
SetBuffer FrontBuffer()

Color 255,0,0:Text 20,20,"Linear"
Color 0,255,0:Text 20,40,"Gausisch"

For q=0 To 360
 Color 255,0,0:Plot q,360-q
 Color 0,255,0:Plot q,180+Cos(q/2)*180
Next

FlushKeys
WaitKey
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

coldie

BeitragDo, Jul 05, 2007 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein bei 0 ist kein Punkt, aber das würde sich ohne größere Probleme einrichten lassen.


@hectic:

Hmm, interessant. Also müsste es irgendwie auch mit Winkelfunktionen gehen.

TheShadow

Moderator

BeitragDo, Jul 05, 2007 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikipedia.org/wiki/Normalverteilung

hm die Kurve sieht mir bisschen komisch aus... die ist mit der sin/cos curve nicht vergleichbar - da unten das sehr flach wird...

spline/bezier kannst du auch nicht nehmen, da diese 3 punkte brauchen
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jul 06, 2007 8:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, stimmt! Hab wohl geträumt oder sowas.

Hier ein Vergleich (oben Linear / unten Gausische Verteilung (diesmal echte Gausische Verteilung))

user posted image

Der Linearverluaf hat zwar eine bessere Ausnutzung des Verlaufes, man erkennt aber auch leider deutlich eine ''Kante'' da, wo es endgültig zu weiß über geht.

Die Gausische Verteilung macht ein echten Übergang für das menschliche Auge unsichtbar, dafür ist der Verlauf - für das menschliche Auge - nicht mehr ganz so ausgeweitet.

Beide Verläufe haben eine angegebene Breite von 192 Pixel.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group