IRangeValue

Aus AquaSoft Wiki
Version vom 23. Juni 2014, 16:43 Uhr von Mark.lorenz (Diskussion | Beiträge) (→‎Beispiele)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

IRangeValue ist ein Datentyp, der es ermöglicht, einen Wertebereich anzugeben, anstelle eines konkreten Wertes. Dieser Wertebereich wird über zwei begrenzende Kurven definiert. Die Kurven geben Werte zu einem bestimmten Zeitpunkt an. Ist nur eine Kurve definiert, gibt der RangeValue die Werte dieser Kurve zu einem bestimmten Zeitpunkt aus. Sind zwei Kurven definiert, gibt der RangeValue einen zufälligen Wert zwischen den Werten der beiden Kurven zum gegebenen Zeitpunkt aus. Siehe Beispiele. Möglich ist auch, dass anstelle eines Zufallswertes eine Wichtung genommen wird, siehe IParticleRangeValue.

 IRangeValue
   function GetValue (const Time: Double): Double;
   procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);
   procedure Clear;
   procedure Assign(const Other: IScripting_IRangeValue);
 end;

Methoden

  • Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe hier. SetValueXYZ gibt allen Dimensionen den gleichen Wert.

 procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);

  • Wert zum Zeitpunkt Time ausgeben, analog zum Setter.

 function GetValue (const Time: Double): Double;


  • Alle Werte löschen

 procedure Clear;


  • Werte von anderem IParticleRangeValue übernehmen:

 procedure Assign(const Other: IParticleVectorRangeValue);


Beispiele

Beispiel 1: Ein RangeValue soll eine konstante Funktion werden. Dann wird ausschließlich nur die erste Kurve mit Werten gefüllt:

 RangeValue.SetValue(0, 0, 10); //Parameter: KurvenIndex, Zeitpunkt, Wert

Dieser Code sagt, dass die beschränkende Kurve 0 zum Zeitpunkt 0 den Wert 10 erhält. Aufgrund der Interpolation hat die Kurve zu jedem anderen Zeitpunkt ebenfalls den Wert 10.


Beispiel 2: Dem RangeValue werden zwei Werte zugewiesen

 RangeValue.SetValue(0, 0, 10);
 RangeValue.SetValue(0, 1000, 20);

Der RangeValue hat weiterhin nur eine beschränkende Kurve. Doch sie ist keine Konstante mehr: Zum Zeitpunkt 0 liefert sie den Wert 0, zum Zeitpunkt 1000 und höher den Wert 20. Die Werte zwischen 0 und 1000 werden interpoliert. Zum Zeitpunkt 500 könnte der RangeValue also 15 liefern. So lassen sich beliebige Kurven konstruieren.


Der RangeValue kann aber eben auch Bereichsangaben haben. Gibt man jetzt Werte für zwei beschränkende Kurven an, erhält man einen Bereich. Der RangeValue liefert nun einen zufälligen Wert zwischen den Werten der beiden Schranken (andere Fälle: siehe Wichtung bei IParticleRangeValue).

Beispiel 3: RangeValue mit Bereichsangeben:

 RangeValue.SetValue(0, 0, 10);
 RangeValue.SetValue(1, 0, 100);

Der RangeValue erhält hier zwei beschränkende Kurven. Beide Kurven sind Konstanten, in dem Fall mit den Werten 10 und 100. Der RangeValue wird also als Wert zu jedem beliebigen Zeitpunkt einen zufälligen Wert zwischen 10 und 100 ausgeben.


Beispiel 4: Nichtkonstante Schranken:

 RangeValue.SetValue(0, 0, 10);
 RangeValue.SetValue(1, 0, 100);
 RangeValue.SetValue(0, 1000, 20);
 RangeValue.SetValue(1, 500, 50);

Der RangeValue hat nun zwei nichtkonstante Kurven als Schranken erhalten. Er wird beim Zeitpunkt 500 also beide Kurvenwerte interpolieren. Die Kurve 0 hat zum Zeitpunkt 500 den Wert 15. Die Kurve 1 hat zum Zeitpunkt 500 den Wert 50. Demnach liefert der RangeValue zum Zeitpunkt 500 einen zufälligen Wert zwischen 15 und 50.