De/Vector: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
m (Nesciuse moved page Vector:de to De/Vector over redirect: -Language prefixes)
m (obsolete language category)
 
(One intermediate revision by the same user not shown)
Line 3: Line 3:
{{toc-right}}
{{toc-right}}


'''<code>Vector</code>''' ist eine C++-Klasse, die eine Linie mit einer Richtung und einer Länge repräsentiert, die beim aktuellen [[Origin|Ursprung]] beginnt. Jeder Vektor beinhaltet 3 <code>[[vec_t|vec_t]]</code> Koordinaten:
'''<code>Vector</code>''' ist eine C++-Klasse, die eine Linie mit einer Richtung und einer Länge repräsentiert, die beim aktuellen {{L|Origin|Ursprung}} beginnt. Jeder Vektor beinhaltet 3 <code>{{L|vec_t}}</code> Koordinaten:


* '''X''' +vorwärts/-rückwärts
* '''X''' +vorwärts/-rückwärts
Line 9: Line 9:
* '''Z''' +oben/-unten
* '''Z''' +oben/-unten


<code>(1,20,5)</code> bedeutet 1 [[unit|Einheit]] vorwärts, 20 Einheiten nach links und 5 Einheiten über dem aktuellen Ursprung.
<code>(1,20,5)</code> bedeutet 1 {{L|unit|Einheit}} vorwärts, 20 Einheiten nach links und 5 Einheiten über dem aktuellen Ursprung.


{{Note|Sources Vektorklasse ist geometrisch und unterscheidet sich ''sehr'' von der [[Wikipedia:Vector (C++)|Standard-Tamplate-Bibliothek]], was eine Art von [[Wikipedia:Array|Array]] ist. der STL-Vektor wurde in <code>[[CUtlVector|CUtlVector]]</code> in Source umbenannt.}}
{{Note|Sources Vektorklasse ist geometrisch und unterscheidet sich ''sehr'' von der {{L|Wikipedia:Vector (C++)|Standard-Tamplate-Bibliothek}}, was eine Art von {{L|Wikipedia:Array|Array}} ist. der STL-Vektor wurde in <code>{{L|CUtlVector}}</code> in Source umbenannt.}}


== Deklaration ==
== Deklaration ==
Line 32: Line 32:


; Positionierung
; Positionierung
: Jede Position einer Entity ('Ursprung' - "'origin'") wird als Vektor relativ zu seinem [[parent|übergeordneten Element]]: wahrscheinlich sind diese bereits als [[coordinates|kartesische Koordinaten]] bekannt. Siehe <code>[[GetAbsOrigin()|GetAbsOrigin()]]</code> für mehr Details.
: Jede Position einer Entity ('Ursprung' - "'origin'") wird als Vektor relativ zu seinem {{L|parent|übergeordneten Element}}: wahrscheinlich sind diese bereits als {{L|coordinates|kartesische Koordinaten}} bekannt. Siehe <code>{{L|GetAbsOrigin()}}</code> für mehr Details.
; Bewegung
; Bewegung
: Eine Entity versucht, sich je Sekunde um die Länge seiner [[velocity|Geschwindigkeit]] zu bewegen.
: Eine Entity versucht, sich je Sekunde um die Länge seiner {{L|velocity|Geschwindigkeit}} zu bewegen.
; Kollisionsspuren
; Kollisionsspuren
: Eine [[UTIL_TraceLine|Traceline]] oder [[UTIL_TraceHull|TraceHull]] wird von einem Punkt auf einen anderen gefeuert, um aufzuspüren, was es auf seinem Weg trifft.
: Eine {{L|UTIL_TraceLine|Traceline}} oder {{L|UTIL_TraceHull|TraceHull}} wird von einem Punkt auf einen anderen gefeuert, um aufzuspüren, was es auf seinem Weg trifft.


== Operationen ==
== Operationen ==


Alle Vektoren müssen innerhalb einer Operation den gleichen [[origin|Ursprung]] haben, damit das Ergebnis Sinn ergibt. Ob eine lokaler oder absoluter Ursprung verwendet wird, hängt davon ab, was erreicht werden soll.
Alle Vektoren müssen innerhalb einer Operation den gleichen {{L|origin|Ursprung}} haben, damit das Ergebnis Sinn ergibt. Ob eine lokaler oder absoluter Ursprung verwendet wird, hängt davon ab, was erreicht werden soll.


=== Addition ===
=== Addition ===
Line 59: Line 59:
==== Skalar ====
==== Skalar ====


einen Vektor mit einem [[Wikipedia:Scalar|Skalar]] (z. B. ein [[int|int]] oder [[float|float]]) zu multiplizieren oder zu dividieren wird dessen '''Länge''' (gelegentlich "Größe" - "magnitude" - genannt), ohne die Richtung zu beeinflussen.
einen Vektor mit einem {{L|Wikipedia:Scalar|Skalar}} (z. B. ein {{L|int}} oder {{L|float}}) zu multiplizieren oder zu dividieren wird dessen '''Länge''' (gelegentlich "Größe" - "magnitude" - genannt), ohne die Richtung zu beeinflussen.


[[File:Vector-scalar_multiply.png|center|Vector-Skalar-Multiplikation: (1,2) x 2 = (2,4)]]
[[File:Vector-scalar_multiply.png|center|Vector-Skalar-Multiplikation: (1,2) x 2 = (2,4)]]


{{Tip|Einen Vektor durch seine Länge zu teilen, [[normal|normalisiert]] ihn. Man kann <code>VectorNormalize()</code> verwenden, um dies schnell zu erledigen.}}
{{Tip|Einen Vektor durch seine Länge zu teilen, {{L|normal|normalisiert}} ihn. Man kann <code>VectorNormalize()</code> verwenden, um dies schnell zu erledigen.}}


==== Skalarprodukt ====
==== Skalarprodukt ====


Das Multiplizieren zweier Vektoren und addieren der Komponenten des resultierenden Vektors erzeugt ein Skalarprodukt, welches dem '''Cosinus''' des Winkels zwischen den Vektoren entspricht, wenn beide Vektoren [[normal|normalisiert]].
Das Multiplizieren zweier Vektoren und addieren der Komponenten des resultierenden Vektors erzeugt ein Skalarprodukt, welches dem '''Cosinus''' des Winkels zwischen den Vektoren entspricht, wenn beide Vektoren {{L|normal|normalisiert}}.


Eine Verwendung von Skalarprodukten ist, zu sagen, wie dicht die beiden Vektoren verlaufen. +1 bedeutet, sie stimmen überein, 0 bedeutet, sie stehen senkrecht zueinander und -1 bedeutet, sie sind entgegengesetzt.
Eine Verwendung von Skalarprodukten ist, zu sagen, wie dicht die beiden Vektoren verlaufen. +1 bedeutet, sie stimmen überein, 0 bedeutet, sie stehen senkrecht zueinander und -1 bedeutet, sie sind entgegengesetzt.


{{Note|''Echte Skalarprodukte entstehen nur, wenn die Länge beider Vektoren 1 ist.'' Der [[normal|Normalisation]]sschritt wurde im folgenden Beispiel ausgelassen, um die Gleichungen einfacher zu machen (die Positiv/Null/Negativ-Regel gilt dennoch).}}
{{Note|''Echte Skalarprodukte entstehen nur, wenn die Länge beider Vektoren 1 ist.'' Der {{L|normal|Normalisation}}sschritt wurde im folgenden Beispiel ausgelassen, um die Gleichungen einfacher zu machen (die Positiv/Null/Negativ-Regel gilt dennoch).}}


[[File:Vector_dotproduct.png|center|Vector-Skalarprodukt: (2,2) x (-2,0) = (-4,0) = -4; (2,2) x (-2,2) = (-4,4) = 0; (2,2) x (2,2) = (4,4) = 8]]
[[File:Vector_dotproduct.png|center|Vector-Skalarprodukt: (2,2) x (-2,0) = (-4,0) = -4; (2,2) x (-2,2) = (-4,4) = 0; (2,2) x (2,2) = (4,4) = 8]]
Line 96: Line 96:
Ein Kreuzprodukt ist ein Vektor, der '''senkrecht''' zu 2 Eingangsvektoren steht. Er wird verwendet die 3. Dimenson aus nur 2 zu extrapolieren: das Kreuzprodukt eines Vektors, der die X-Achse entlang zeigt und eines Vektors, der die Y-Achse entlang zeigt, ist ein Vektor, der die Z-Achse entlang zeigt.
Ein Kreuzprodukt ist ein Vektor, der '''senkrecht''' zu 2 Eingangsvektoren steht. Er wird verwendet die 3. Dimenson aus nur 2 zu extrapolieren: das Kreuzprodukt eines Vektors, der die X-Achse entlang zeigt und eines Vektors, der die Y-Achse entlang zeigt, ist ein Vektor, der die Z-Achse entlang zeigt.


Die Gleichung ist knifflig und muss nicht gelernt werden; man kann <code>CrossProduct(vecA,vecB,&vecResult)</code> verwenden. Es besteht grundsätzlich keine Notwendigkeit, die Eingabevektoren zu normalisieren. Die meisten Modder werden Kreuzprodukte nur selten verwenden, wenn überhaupt. Wenn jedoch benötigt, dass eine [http://mathworld.wolfram.com/CrossProduct.html mäßige Menge Mathematik] benötigt wird, um diese Operation [[Wikipedia:Cross product|richtig zu verstehen]].
Die Gleichung ist knifflig und muss nicht gelernt werden; man kann <code>CrossProduct(vecA,vecB,&vecResult)</code> verwenden. Es besteht grundsätzlich keine Notwendigkeit, die Eingabevektoren zu normalisieren. Die meisten Modder werden Kreuzprodukte nur selten verwenden, wenn überhaupt. Wenn jedoch benötigt, dass eine [http://mathworld.wolfram.com/CrossProduct.html mäßige Menge Mathematik] benötigt wird, um diese Operation {{L|Wikipedia:Cross product|richtig zu verstehen}}.


== Rotation ==
== Rotation ==


Einen Vektor zu rotieren erfordert eine [[matrix3x4_t|Matrix]], also kann es nicht mit einer Operation wie oben getan werden. Glücklicherweise muss man nicht in die Details einarbeiten: man kann einfach <code>VectorRotate(Vector in, QAngle in, Vector& out)</code> aufrufen.
Einen Vektor zu rotieren erfordert eine {{L|matrix3x4_t|Matrix}}, also kann es nicht mit einer Operation wie oben getan werden. Glücklicherweise muss man nicht in die Details einarbeiten: man kann einfach <code>VectorRotate(Vector in, QAngle in, Vector& out)</code> aufrufen.


== Spezielle Vektoren ==
== Spezielle Vektoren ==
Line 114: Line 114:
=== Länge ===
=== Länge ===


; <code>[[vec_t|vec_t]] Length()</code>
; <code>{{L|vec_t}} Length()</code>
; <code>vec_t LengthSqr()</code>
; <code>vec_t LengthSqr()</code>
: <code>Length()</code> liefert die Länge des Vektors in [[unit|Einheiten]]. Es ist schneller, <code>LengthSqr()</code> zu verwenden und den anderen Vergleichswert zu quadrieren.
: <code>Length()</code> liefert die Länge des Vektors in {{L|unit|Einheiten}}. Es ist schneller, <code>LengthSqr()</code> zu verwenden und den anderen Vergleichswert zu quadrieren.
; <code>[[bool|bool]] IsLengthGreaterThan(flValue)</code>
; <code>{{L|bool}} IsLengthGreaterThan(flValue)</code>
; <code>bool IsLengthLessThan(flValue)</code>
; <code>bool IsLengthLessThan(flValue)</code>
: Helfer, die schnelle Längenprüfungen mittels <code>LengthSqr()</code> durchführen.
: Helfer, die schnelle Längenprüfungen mittels <code>LengthSqr()</code> durchführen.
Line 150: Line 150:


; <code>Vector2D AsVector2D()</code>
; <code>Vector2D AsVector2D()</code>
: Castet zu einem [[Vector2D|Vector2D]].
: Castet zu einem {{L|Vector2D}}.
; <code>vec_t Length2D()</code>
; <code>vec_t Length2D()</code>
; <code>vec_t Length2DSqr()</code>
; <code>vec_t Length2DSqr()</code>
: Wie die Standardfunktionen, nur dass die Z-Achse ignoriert wird.
: Wie die Standardfunktionen, nur dass die Z-Achse ignoriert wird.
; <code>Base()</code>
; <code>Base()</code>
: Castet zu einem [[vec_t|vec_t]]* - grundsätzlich das gleiche, wie &vec.x oder (float*)&vec.
: Castet zu einem {{L|vec_t}}* - grundsätzlich das gleiche, wie &vec.x oder (float*)&vec.


== Hilfsfunktionen ==
== Hilfsfunktionen ==
Line 161: Line 161:
Diese globalen Funktionen sind überall über <code>cbase.h</code> verfügbar.
Diese globalen Funktionen sind überall über <code>cbase.h</code> verfügbar.


; <code>[[float|float]] VectorNormalize(vec)</code>
; <code>{{L|float}} VectorNormalize(vec)</code>
: Teilt den Vektor durch seine Länge - [[normal|normalisiert]] ihn. Passt den Vektor an und liefert die alte Länge.
: Teilt den Vektor durch seine Länge - {{L|normal|normalisiert}} ihn. Passt den Vektor an und liefert die alte Länge.
; <code>[[vec_t|vec_t]] DotProduct(vecA,vecB)</code>
; <code>{{L|vec_t}} DotProduct(vecA,vecB)</code>
: Siehe [[#Kreuzprodukt|Kreuzprodukt]].
: Siehe [[#Kreuzprodukt|Kreuzprodukt]].
; <code>void CrossProduct(vecA,vecB,vecResult)</code>
; <code>void CrossProduct(vecA,vecB,vecResult)</code>
: Siehe [[#Kreuzprodukt|Kreuzprodukt]].
: Siehe [[#Kreuzprodukt|Kreuzprodukt]].
; <code>void VectorTransform(Vector in1, matrix3x4_t in2, Vector out)</code>
; <code>void VectorTransform(Vector in1, matrix3x4_t in2, Vector out)</code>
: Siehe [[matrix3x4_t|matrix3x4_t]].
: Siehe {{L|matrix3x4_t}}.
* [[UTIL_VecToYaw()|<code>UTIL_VecToYaw()</code> / <code>UTIL_VecToPitch()</code>]]
* {{L|UTIL_VecToYaw()|<code>UTIL_VecToYaw()</code> / <code>UTIL_VecToPitch()</code>}}
* [[AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>]]
* {{L|AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>}}


== Siehe auch ==
== Siehe auch ==


* [[Wikipedia:Euclidean vector]]
* {{L|Wikipedia:Euclidean vector}}
* <code>[[vec_t|vec_t]]</code>
* <code>{{L|vec_t}}</code>
* <code>[[Vector2D|Vector2D]]</code>
* <code>{{L|Vector2D}}</code>
* <code>[[QAngle|QAngle]]</code>
* <code>{{L|QAngle}}</code>
* <code>[[matrix3x4_t|matrix3x4_t]]</code>
* <code>{{L|matrix3x4_t}}</code>
* <code>[[CUtlVector|CUtlVector]]</code>
* <code>{{L|CUtlVector}}</code>


[[Category:Glossary:de]]
{{ACategory|Glossary}}
[[Category:Variables:de]]
{{ACategory|Variables}}
[[Category:Helpers:de]]
{{ACategory|Helpers}}

Latest revision as of 02:18, 22 August 2024

English (en)Deutsch (de)Français (fr)Русский (ru)Translate (Translate)

Vector ist eine C++-Klasse, die eine Linie mit einer Richtung und einer Länge repräsentiert, die beim aktuellen Ursprung(en) beginnt. Jeder Vektor beinhaltet 3 vec_t(en) Koordinaten:

  • X +vorwärts/-rückwärts
  • Y +links/-rechts
  • Z +oben/-unten

(1,20,5) bedeutet 1 Einheit(en) vorwärts, 20 Einheiten nach links und 5 Einheiten über dem aktuellen Ursprung.

Note.pngBemerkung:Sources Vektorklasse ist geometrisch und unterscheidet sich sehr von der Standard-Tamplate-Bibliothek(en), was eine Art von Array(en) ist. der STL-Vektor wurde in CUtlVector(en) in Source umbenannt.

Deklaration

Vector vecMyVector = Vector(1,20,5);
  • Der Klassenname Vector ist Case Sensitive.
  • Ein Vektor kann erzeugt werden, indem die X-, Y- und Z-Member separat definiert werden, durch das übergeben eines einzelnen Werts für alle 3 oder durch das Kopieren der Daten eines anderen Vektors.
  • der Präfix vec (oder manchmal nur v) identifiziert die Variable als Vektor.

Ausrichtung

Ein Vektor hat keine Ausrichtung; dieser wird durch den Code, der ihn verwendet, bestimmt.

In der überwiegenden Mehrheit der Fälle wird ein Vektor als Weltachsen-ausgerichtet interpretiert, unabhängig von der Ausrichtung der Entity. Es gibt aber ein paar Fälle (z. B. beim Anwenden physikalischer Kräfte), in denen sie als Objektachsen ausgerichtet angesehen werden.

Es gibt keine Möglichkeit, zu sagen, welche Interpretation der Variable verwendet wird, also sollten bei Zweifeln Funktionskommentare zu Rate gezogen werden. Man kann VectorRotate() und VectorIRotate() verwenden, um zwischen den Ausrichtungen zu übersetzen.

Verwendung

Positionierung
Jede Position einer Entity ('Ursprung' - "'origin'") wird als Vektor relativ zu seinem übergeordneten Element(en): wahrscheinlich sind diese bereits als kartesische Koordinaten(en) bekannt. Siehe GetAbsOrigin()(en) für mehr Details.
Bewegung
Eine Entity versucht, sich je Sekunde um die Länge seiner Geschwindigkeit(en) zu bewegen.
Kollisionsspuren
Eine Traceline(en) oder TraceHull(en) wird von einem Punkt auf einen anderen gefeuert, um aufzuspüren, was es auf seinem Weg trifft.

Operationen

Alle Vektoren müssen innerhalb einer Operation den gleichen Ursprung(en) haben, damit das Ergebnis Sinn ergibt. Ob eine lokaler oder absoluter Ursprung verwendet wird, hängt davon ab, was erreicht werden soll.

Addition

2 (oder mehr) Vektoren zu addieren, kombiniert. Man kennt die Vektoraddition bereits, wenn man ein Objekt mit 2 Händen verschoben hat!

Vectoraddition: (4,1) + (-3,1) = (1,2)

Subtraktion

Einen Vektor von einem anderen abzuziehen erzeugt die Differenz zwischen den beiden - in anderen Worten, wie man zur ersten Position von der zweiten Position kommt. Das Ergebnis ist lokal zum zweiten Vektor.

Vectorsubtraktion: (2,3) - (-2,1) = (4,2)
Tip.pngTipp:Die Reihenfolge bei der Subtraktion bestimmt die Richtung des Vektors.

Multiplikation

Skalar

einen Vektor mit einem Skalar(en) (z. B. ein int(en) oder float(en)) zu multiplizieren oder zu dividieren wird dessen Länge (gelegentlich "Größe" - "magnitude" - genannt), ohne die Richtung zu beeinflussen.

Vector-Skalar-Multiplikation: (1,2) x 2 = (2,4)
Tip.pngTipp:Einen Vektor durch seine Länge zu teilen, normalisiert(en) ihn. Man kann VectorNormalize() verwenden, um dies schnell zu erledigen.

Skalarprodukt

Das Multiplizieren zweier Vektoren und addieren der Komponenten des resultierenden Vektors erzeugt ein Skalarprodukt, welches dem Cosinus des Winkels zwischen den Vektoren entspricht, wenn beide Vektoren normalisiert(en).

Eine Verwendung von Skalarprodukten ist, zu sagen, wie dicht die beiden Vektoren verlaufen. +1 bedeutet, sie stimmen überein, 0 bedeutet, sie stehen senkrecht zueinander und -1 bedeutet, sie sind entgegengesetzt.

Note.pngBemerkung:Echte Skalarprodukte entstehen nur, wenn die Länge beider Vektoren 1 ist. Der Normalisation(en)sschritt wurde im folgenden Beispiel ausgelassen, um die Gleichungen einfacher zu machen (die Positiv/Null/Negativ-Regel gilt dennoch).
Vector-Skalarprodukt: (2,2) x (-2,0) = (-4,0) = -4; (2,2) x (-2,2) = (-4,4) = 0; (2,2) x (2,2) = (4,4) = 8

Dieser Code berechnet mit der Unterstützung durch die diversen Hilfsfunktionen von Source ein Skalarprodukt:

Vector vecTarget = pTarget->GetAbsOrigin() - GetAbsOrigin();	// Get local vector to target
VectorNormalize(vecTarget);	// Normalisierung muss vorher erledigt werden

Vector vecFacing;
AngleVectors(GetLocalAngles(),&vecFacing);	// Konvertiert den zugewandten Winkel in einen äquivalenten Vektor

float result = DotProduct(vecTarget,vecFacing);	// Das Skalarprodukt errechnen

if (result > 0)
	Msg("pTarget ist vor mir!\n");
Tip.pngTipp:Es ist nicht notwendig, sich um eine Normalisierung zu kümmern, wenn nur bestimmt werden soll, ob eine Position vor einer anderen ist.

Kreuzprodukt

Ein Kreuzprodukt ist ein Vektor, der senkrecht zu 2 Eingangsvektoren steht. Er wird verwendet die 3. Dimenson aus nur 2 zu extrapolieren: das Kreuzprodukt eines Vektors, der die X-Achse entlang zeigt und eines Vektors, der die Y-Achse entlang zeigt, ist ein Vektor, der die Z-Achse entlang zeigt.

Die Gleichung ist knifflig und muss nicht gelernt werden; man kann CrossProduct(vecA,vecB,&vecResult) verwenden. Es besteht grundsätzlich keine Notwendigkeit, die Eingabevektoren zu normalisieren. Die meisten Modder werden Kreuzprodukte nur selten verwenden, wenn überhaupt. Wenn jedoch benötigt, dass eine mäßige Menge Mathematik benötigt wird, um diese Operation richtig zu verstehen(en).

Rotation

Einen Vektor zu rotieren erfordert eine Matrix(en), also kann es nicht mit einer Operation wie oben getan werden. Glücklicherweise muss man nicht in die Details einarbeiten: man kann einfach VectorRotate(Vector in, QAngle in, Vector& out) aufrufen.

Spezielle Vektoren

Source definiert 2 spezielle Vektoren:

vec3_origin
Vector(0,0,0).
vec3_invalid
Dieser wird für ungültige Vektoren verwendet, z. B. wenn eine Funktion einen Vektor zurückliefern soll, dies aber nicht möglich ist (beispielsweise der Schnittpunkt zweier paralleler Linien).

Memberfunktionen

Länge

vec_t(en) Length()
vec_t LengthSqr()
Length() liefert die Länge des Vektors in Einheiten(en). Es ist schneller, LengthSqr() zu verwenden und den anderen Vergleichswert zu quadrieren.
bool(en) IsLengthGreaterThan(flValue)
bool IsLengthLessThan(flValue)
Helfer, die schnelle Längenprüfungen mittels LengthSqr() durchführen.
void Zero()
Setzt alle Elemente auf 0.

Richtung

void Init(vec_t X, Y, Z)
Schnelles setzten der Komponenten eines Vektors.
void Random(vec_t minVal,vec_t maxVal)
Wählt zufällig neue Werte für die 3 Komponenten innerhalb des gegebenen Bereichs.
void Negate()
Kehrt die Richtung eines Vektors um, ohne die Länge zu beeinflussen.
Vector Max(vOther)
Vector Min(vOther)
Schneidet die Komponenten ab, sollten sie sich über oder unter dem angegebenen Wert befinden. Die Komponenten behalten dabei nicht ihre Proportionen (die Richtung ändert sich möglicherweise).

Vergleich

vec_t DistTo(vOther)
vec_t DistToSqr(vOther)
Liefert die Distanz zwischen dem aktuellen Vektor und vOther als Skalar. Wie immer ist das quadrierte Ergebnis schneller.
vec_t Dot(vOther)
Liefert das Skalarprodukt des aktuellen Vektors und vOther.
Vector Cross(vOther)
Liefert das Kreuzprodukt des aktuellen Vektors und vOther.
bool WithinAABox(vecBoxmin,vecBoxmax)
Prüft, ob der Vektor innerhalb der gegebenen Box endet. Boxmin und -max sind lokal zum Vektor.

Casts

Vector2D AsVector2D()
Castet zu einem Vector2D(en).
vec_t Length2D()
vec_t Length2DSqr()
Wie die Standardfunktionen, nur dass die Z-Achse ignoriert wird.
Base()
Castet zu einem vec_t(en)* - grundsätzlich das gleiche, wie &vec.x oder (float*)&vec.

Hilfsfunktionen

Diese globalen Funktionen sind überall über cbase.h verfügbar.

float(en) VectorNormalize(vec)
Teilt den Vektor durch seine Länge - normalisiert(en) ihn. Passt den Vektor an und liefert die alte Länge.
vec_t(en) DotProduct(vecA,vecB)
Siehe Kreuzprodukt.
void CrossProduct(vecA,vecB,vecResult)
Siehe Kreuzprodukt.
void VectorTransform(Vector in1, matrix3x4_t in2, Vector out)
Siehe matrix3x4_t(en).

Siehe auch