Aktuelle Zeit: 07.05.2024, 05:00

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 28.09.2007, 11:45 
Offline

Registriert: 28.05.2007, 14:48
Beiträge: 18
Hi, ich hab ne allgemeine frage: In verschiedenen Irrlicht Klassen (Vector/Color) gibt es ja die funktionen Get_Interpolated und Get_Interpolated_Quadratic. Was die erste macht ist mir klar, aber wofür ist die zweite? (und wofür braucht sie zwei zusätzliche werte?)


Nach oben
 Profil  
 
BeitragVerfasst: 28.09.2007, 11:53 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
http://de.wikipedia.org/wiki/Interpolation ?

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 28.09.2007, 13:33 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Der Grund, warum es eine funktion gibt, die den quadrierten Wert liefert, ist die Geschwindigkeit.
Einfaches Beispiel: Die Entfernung zwischen 2 Punkten => a² = b² + c² => a = sqrt(a² + b²)

Wurzelberechnung ist so ziehmlich das aufwendigste was man einem CPU antun kann. Und da es nunmal egal ist, ob man 3 und 3 oder 9 und 9 vergleicht, wird vorzugsweise die funktion benutzt, die das Ergebnis als Quadrat liefert, da so einiges an Rechenleistung gespart werden kann

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 28.09.2007, 14:23 
Offline

Registriert: 28.05.2007, 14:48
Beiträge: 18
@ thephönix: Ich weiß wofür Interpolation gut ist :)
@ Sylence: Dass gilt doch wohl eher für zb. GetLenght/GetLenghtSQ.
Wenn man sich mal den Code in zb Vector2d anguckt:
Code:
//! returns interpolated vector
//! \param other: other vector to interpolate between
//! \param d: value between 0.0f and 1.0f.
vector2d<T> getInterpolated(const vector2d<T>& other, f32 d) const
{
   T inv = (T) 1.0 - d;
   return vector2d<T>(other.X*inv + X*d, other.Y*inv + Y*d);
}
//! Returns (quadratically) interpolated vector between this and the two given ones.
/** \param v2: second vector to interpolate with
\param v3: third vector to interpolate with
\param d: value between 0.0f and 1.0f. */
vector2d<T> getInterpolated_quadratic(const vector2d<T>& v2, const vector2d<T>& v3, const T d) const
{
   const T inv = (T) 1.0 - d;
   const T mul0 = inv * inv;
   const T mul1 = (T) 2.0 * d * inv;
   const T mul2 = d * d;
   return vector2d<T> ( X * mul0 + v2.X * mul1 + v3.X * mul2,
         Y * mul0 + v2.Y * mul1 + v3.Y * mul2);
}

In GetInterpolated gibt es keine quadratwurzel die in GetInterpolated_Quadratic weggelassen werden könnte, statdessen wird dort mit zwei zusätzlichen Vectoren gearbeitet, und nur dass verstehe ich nicht wirklich...


Nach oben
 Profil  
 
BeitragVerfasst: 28.09.2007, 14:54 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
@ thephönix: Ich weiß wofür Interpolation gut ist :)


Wenn ich das richtig verstanden habe, ist das eine halt lineare Interpolation und das andere kubische, und das wird dort doch erklärt :)

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 29.09.2007, 17:52 
Offline

Registriert: 28.05.2007, 14:48
Beiträge: 18
Puh... Was da steht war zu hoch für mich, aber durch Ausprobieren hab ich dann selbst rausgefunden das GetInterpolated_Quadratic nen Vector zurückgibt der auf einer Kurve (statt ner Linie wie bei GetInterpolated) zwischen den zwei Vektoren liegt, und die zusätzliche Vektorangabe nur bestimmt wohin sich die kurve ausbeult. (Vielleicht nicht ganz mathematisch korrekt, aber ich finde dass erklärt was die Funktion macht)


Nach oben
 Profil  
 
BeitragVerfasst: 04.10.2007, 15:38 
Offline

Registriert: 08.04.2007, 16:55
Beiträge: 115
ja... Lineare Interpolation verbindet die zwei werte einfach mittels einer linie und liefert dann einen Punkt/Wert auf eben jener zurueck.
Qubische (Biqubische) Interpolation bildet ein Polynom, das durch 4 punkte geht und gibt dann einen Punkt/Wert auf diesem Polynom wieder (Polynome sind gebilde die keine Knicke haben, daher immer schoen weich Werte liefern..)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de