import std.coordinates.vec3;
Dreidimensionale Vektoren in f64: Grundrechenarten, Skalar- und Kreuzprodukt, Norm, Winkel, Projektion. Der Typ, den std.quat zum Drehen braucht und std.vector mit seinen ganzzahligen Vec2 nicht liefern kann.
→ std.coordinates Übersicht · std.coordinates.transform · std.matrix
pub type V3 = struct { x: f64; y: f64; z: f64; }
| Signatur | Zweck |
|---|---|
V3New(x: f64, y: f64, z: f64): V3 | Vektor bauen |
V3Zero(): V3 · V3UnitX(): V3 · V3UnitY(): V3 · V3UnitZ(): V3 | Nullvektor und Einheitsvektoren |
V3Error(): V3 | Vektor aus NaN |
V3IsError(v: V3): bool | Prüft, ob eine Komponente NaN ist |
V3ErrorValue(): f64 · V3IsErrorValue(x: f64): bool | derselbe Fehlerwert als Skalar |
Wie in std.aero und std.astro ist der Fehlerwert NaN: ein Nullvektor wäre ein gültiges Ergebnis und damit als Fehlermeldung untauglich.
| Signatur | Zweck |
|---|---|
V3Add(a: V3, b: V3): V3 · V3Sub(a: V3, b: V3): V3 | Summe, Differenz |
V3Scale(v: V3, s: f64): V3 · V3Neg(v: V3): V3 | Streckung, Gegenvektor |
V3Dot(a: V3, b: V3): f64 | Skalarprodukt |
V3Cross(a: V3, b: V3): V3 | Kreuzprodukt |
V3Triple(a: V3, b: V3, c: V3): f64 | Spatprodukt — das Volumen des aufgespannten Parallelepipeds |
V3Lerp(a: V3, b: V3, t: f64): V3 | lineare Zwischenwerte |
| Signatur | Zweck |
|---|---|
V3Norm(v: V3): f64 | Betrag |
V3Norm2(v: V3): f64 | Betragsquadrat — ohne Wurzel, für Vergleiche der schnellere Weg |
V3Normalize(v: V3): V3 | Einheitsvektor; beim Nullvektor der Fehlerwert |
V3Distance(a: V3, b: V3): f64 | Abstand zweier Punkte |
V3Angle(a: V3, b: V3): f64 | eingeschlossener Winkel in Bogenmaß |
V3Project(a: V3, b: V3): V3 | Anteil von a entlang b |
V3Reject(a: V3, b: V3): V3 | Anteil von a senkrecht zu b |
V3Project und V3Reject ergänzen sich: zusammen ergeben sie wieder a. Das ist der übliche Weg, eine Geschwindigkeit in „längs„ und „quer“ zu zerlegen — etwa Wind in Gegen- und Seitenwind.
unit main;
import std.coordinates.vec3;
import std.io;
import std.string;
fn main(): int64 {
var a: V3 := V3New(3.0, 0.0, 4.0);
var b: V3 := V3New(1.0, 0.0, 0.0);
PrintLn(StrConcat("Betrag: ", FloatToStr(V3Norm(a), 3)));
PrintLn(StrConcat("laengs b: ", FloatToStr(V3Norm(V3Project(a, b)), 3)));
PrintLn(StrConcat("quer zu b: ", FloatToStr(V3Norm(V3Reject(a, b)), 3)));
PrintLn(StrConcat("Winkel (rad):", FloatToStr(V3Angle(a, b), 4)));
return 0;
}
Letzte Aktualisierung: 2026-09-06 — Seite neu angelegt; erhoben aus std/coordinates/vec3.lyx.