vec3
Schnittstelle, die einen 3D-Vektor darstellt. Ein 3D-Vektor wird durch (x, y, z)-Koordinaten dargestellt und kann einen Punkt im Raum, einen Richtungsvektor oder andere Arten von Daten mit drei geordneten Dimensionen darstellen. 3D-Vektoren können mit 4x4-Matrizen (Mat4) unter Verwendung homogener Koordinatenmathematik multipliziert werden, was effiziente 3D-Geometrieberechnungen ermöglicht. Vec3-Objekte werden mit der ecs.math.vec3 Vec3Factory oder durch Operationen mit anderen Vec3-Objekten erstellt.
Quelle
Die Schnittstelle Vec3Source stellt ein beliebiges Objekt dar, das über x-, y- und z-Eigenschaften verfügt und somit als Datenquelle zur Erstellung eines Vec3 verwendet werden kann. Darüber hinaus kann Vec3Source als Argument für Vec3-Algorithmen verwendet werden, was bedeutet, dass jedes Objekt mit {x: number, y: number, z: number} Eigenschaften verwendet werden kann.
Eigenschaften
Vec3 hat die folgenden aufzählbaren Eigenschaften:
readonly x: number
Zugriff auf die x-Komponente des Vektors.
y: Zahl`` Zugriff auf die y-Komponente des Vektors.
z: Zahl`` Zugriff auf die z-Komponente des Vektors.
Fabrik
von
Erstellen Sie einen Vec3 aus einem Vec3 oder einem anderen Objekt mit x, y Eigenschaften.
ecs.math.vec3.from({x, y}: {x: number, y: number, z: number}}) // -> vec3
eine
Erstellen Sie einen vec3, bei dem alle Elemente auf eins gesetzt sind. Dies ist äquivalent zu vec3.from({x: 1, y: 1, z: 1})
.
ecs.math.vec3.one() // -> vec3
scale
Erstellen Sie einen vec3 mit allen Elementen, die auf den Skalenwert s eingestellt sind. Dies ist äquivalent zu vec3.from({x: s, y: s, z: s})
.
ecs.math.vec3.scale(s: Zahl) // -> vec3
xyz
Erstellen eines Vec3 aus den Werten x, y, z. Dies ist äquivalent zu vec3.from({x, y, z})
.
ecs.math.vec3.xyz(x: Zahl, y: Zahl, z: Zahl) // -> vec3
Null
Erstellen Sie einen vec3, bei dem alle Elemente auf Null gesetzt sind. Dies ist äquivalent zu vec3.from({x: 0, y: 0, z: 0})
.
ecs.math.vec3.zero() // -> vec3
Unveränderlich
Die folgenden Methoden führen Berechnungen auf der Grundlage des aktuellen Wertes eines Vec3 durch, verändern aber nicht dessen Inhalt. Methoden, die Vec3-Typen zurückgeben, geben neue Objekte zurück. Unveränderliche APIs sind in der Regel sicherer, besser lesbar und weniger fehleranfällig als veränderliche APIs, können aber in Situationen, in denen Tausende von Objekten pro Frame zugewiesen werden, ineffizient sein.
Wenn die Garbage Collection die Leistung beeinträchtigt, sollten Sie die unten beschriebene Mutable API verwenden.
klonen.
Erstellen Sie einen neuen Vektor mit denselben Komponenten wie dieser Vektor.
existingVec3.clone() // -> vec3
Kreuz
Berechnen Sie das Kreuzprodukt dieses Vektors und eines anderen Vektors.
existingVec3.cross(v: Vec3Source) // -> vec3
Daten
Zugriff auf den Vektor als homogenes Array (4 Dimensionen).
existingVec3.data() // -> Zahl[]
EntfernungZu
Berechnen Sie den euklidischen Abstand zwischen diesem Vektor und einem anderen Vektor.
existingVec3.distanceTo(v: Vec3Source) // -> vec3
dividieren
Elementweise Vektordivision.
existingVec3.divide(v: Vec3Source) // -> vec3
Punkt
Berechnen Sie das Punktprodukt dieses Vektors und eines anderen Vektors.
existingVec3.dot(v: Vec3Source) // -> vec3
ist gleich
Prüfen, ob zwei Vektoren gleich sind, mit einer bestimmten Fließkommatoleranz.
existingVec3.equals(v: Vec3Source, tolerance: number) // -> boolesch
Länge
Länge des Vektors.
existingVec3.length() // -> Zahl
minus
Subtrahiert einen Vektor von diesem Vektor.
existingVec3.minus(v: Vec3Source) // -> vec3
mischen
Berechne eine lineare Interpolation zwischen diesem Vektor und einem anderen Vektor v mit einem Faktor t, so dass das Ergebnis thisVec * (1 - t) + v * t ist. Der Faktor t sollte zwischen 0 und 1 liegen.
existingVec3.mix(v: Vec3Source, t: Zahl) // -> vec3
normalisieren
Gibt einen neuen Vektor mit der gleichen Richtung wie dieser Vektor zurück, aber mit der Länge 1.
existingVec3.normalize() // -> vec3
plus
Zwei Vektoren zusammenfügen.
existingVec3.plus(v: Vec3Source) // -> vec3
scale
Multiplizieren des Vektors mit einem Skalar.
existingVec3.scale(s: Zahl) // -> vec3
mal
Elementweise Vektormultiplikation.
existingVec3.times(v: Vec3Source) // -> vec3
Veränderlich
Die folgenden Methoden führen Berechnungen auf der Grundlage des aktuellen Werts eines Vec3 durch und ändern dessen Inhalt an Ort und Stelle. Sie sind parallel zu den Methoden in der obigen veränderlichen API. Methoden, die Vec3-Typen zurückgeben, geben einen Verweis auf das aktuelle Objekt zurück, um die Methodenverkettung zu erleichtern. Veränderbare APIs können leistungsfähiger sein als unveränderliche APIs, sind aber in der Regel weniger sicher, weniger lesbar und fehleranfälliger.
SetCross
Berechnen Sie das Kreuzprodukt dieses Vektors und eines anderen Vektors. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setCross(v: Vec3Source) // -> vec3
setDivide
Elementweise Vektordivision. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setDivide(v: Vec3Source) // -> vec3
setMinus
Subtrahiert einen Vektor von diesem Vektor. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setMinus(v: Vec3Source) // -> vec3
setMix
Berechne eine lineare Interpolation zwischen diesem Vektor und einem anderen Vektor v mit einem Faktor t, so dass das Ergebnis thisVec * (1 - t) + v * t ist. Der Faktor t sollte zwischen 0 und 1 liegen. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setMinus(v: Vec3Source, t: Zahl) // -> vec3
setNormalize
Setzt den Vektor auf eine Version von sich selbst mit der gleichen Richtung, aber mit der Länge 1. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setNormalize() // -> vec3
setPlus
Zwei Vektoren zusammenfügen. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setPlus(v: Vec3Source) // -> vec3
setScale
Multiplizieren des Vektors mit einem Skalar. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setPlus(s: Zahl) // -> vec3
setTimes
Elementweise Vektormultiplikation. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setTimes(v: Vec3Source) // -> vec3
setX
Stellen Sie die x-Komponente des Vec3 ein. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setX(v: Zahl) // -> vec3
setY
Stellen Sie die y-Komponente des Vec3 ein. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setY(v: Zahl) // -> vec3
setZ
Stellen Sie die z-Komponente des Vec3 ein. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setZ(v: Zahl) // -> vec3
Satz
Die folgenden Methoden setzen den Wert des aktuellen Vec3-Objekts ohne Rücksicht auf seinen aktuellen Inhalt und ersetzen das, was vorher da war.
makeOne
Setzen Sie den Vec3 auf alle Einsen. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.makeOne() // -> vec3
makeScale
Stellen Sie den Vec3 so ein, dass alle Komponenten auf den Skalenwert s eingestellt sind. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.makeScale(s: Zahl) // -> vec3
makeZero
Setzen Sie den Vec3 auf Nullen. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.makeZero() // -> vec3
setFrom
Legen Sie diesen Vec3 so fest, dass er denselben Wert hat wie ein anderer Vec3 oder ein anderes Objekt mit den Eigenschaften x, y und z. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setFrom(source: Vec3Source) // -> vec3
setXyz
Stellen Sie die x-, y- und z-Komponenten des Vec3 ein. Speichert das Ergebnis in diesem Vec3 und gibt diesen Vec3 zur Verkettung zurück.
existingVec3.setFrom(x: Zahl, y: Zahl, z: Zahl) // -> vec3