std.coordinates.vec3 — Vektoren in f64

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


1. Typ und Fehlerwert

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.


2. Rechnen

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

3. Länge, Richtung, Winkel

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.


4. Beispiel

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.