====== std.coordinates — Vektoren und Koordinatensysteme ====== → [[lyx_-_programmiersprache:units|Zurück zur Unit-Übersicht]] · [[lyx_-_programmiersprache:units:geodesy|std.geodesy]] · [[lyx_-_programmiersprache:units:matrix|std.matrix]] · [[lyx_-_programmiersprache:units:quat|std.quat]] Zwei Units für dreidimensionale Geometrie in ''f64'': ein Vektortyp und die Umrechnung zwischen kartesischen, zylindrischen und Kugelkoordinaten. **Die Lücke, die sie füllen:** [[lyx_-_programmiersprache:units:vector|std.vector]] führt ''Vec2'' mit ''int64'' — gut für Bildschirmkoordinaten, untauglich für alles Physikalische. [[lyx_-_programmiersprache:units:quat|std.quat]] erzeugt Drehungen, hat aber keinen Vektortyp, auf den es sie anwenden könnte. **Quelle:** ''std/coordinates/'' ---- ===== Units im Überblick ===== ^ Unit ^ Import ^ Inhalt ^ | [[lyx_-_programmiersprache:units:coordinates:vec3|std.coordinates.vec3]] | ''import std.coordinates.vec3;'' | ''V3''-Typ: Grundrechenarten, Skalar- und Kreuzprodukt, Norm, Normierung, Winkel, Projektion — mit NaN als Fehlerwert | | [[lyx_-_programmiersprache:units:coordinates:transform|std.coordinates.transform]] | ''import std.coordinates.transform;'' | Zylinderkoordinaten (''Cyl''), Kugelkoordinaten in **zwei** Zählweisen (''SphPolar'', ''SphElev'') und die Umrechnungen dazwischen | ---- ===== Zwei Kugelkoordinaten, und warum ===== Die Mathematik zählt vom **Nordpol** (Polarwinkel θ), Astronomie und Navigation zählen vom **Horizont** (Elevation). Beide sind gebräuchlich, beide heißen umgangssprachlich „Kugelkoordinaten" — und ihre Winkel unterscheiden sich um 90°. ^ Typ ^ Winkel ^ Übliches Feld ^ | ''SphPolar'' | ''theta'' — vom Nordpol aus | Physik, Mathematik | | ''SphElev'' | ''elev'' — von der Horizontebene aus | Astronomie, Antennen, Navigation | Deshalb gibt es beide Typen mit eigenen Namen und ''SphPolarToElev'' / ''SphElevToPolar'' dazwischen, statt einer einzigen Struktur, bei der man raten muss, welche Zählweise gemeint ist. ---- ===== Einstiegsbeispiel ===== unit main; import std.coordinates.vec3; import std.coordinates.transform; import std.io; import std.string; fn main(): int64 { var a: V3 := V3New(3.0, 0.0, 4.0); PrintLn(StrConcat("Betrag: ", FloatToStr(V3Norm(a), 3))); var s: SphElev := CartToSphElev(a); PrintLn(StrConcat("Elevation: ", FloatToStr(RadToDeg(s.elev), 2))); PrintLn(StrConcat("Azimut: ", FloatToStr(RadToDeg(s.azim), 2))); var zurueck: V3 := SphElevToCart(s); PrintLn(StrConcat("zurueck x: ", FloatToStr(zurueck.x, 3))); return 0; } ---- ===== Abgrenzung ===== ^ Aufgabe ^ Unit ^ | Vektoren in ''f64'', 3D | **std.coordinates.vec3** | | Ganzzahlige 2D-Vektoren (Bildschirm) | [[lyx_-_programmiersprache:units:vector|std.vector]] | | Matrizen, Transformationsketten | [[lyx_-_programmiersprache:units:matrix|std.matrix]] | | Drehungen ohne Gimbal Lock | [[lyx_-_programmiersprache:units:quat|std.quat]] | | Positionen auf der Erde | [[lyx_-_programmiersprache:units:geodesy|std.geodesy]], [[lyx_-_programmiersprache:units:geo:sphere|std.geo.sphere]] | | Bahnmechanik | [[lyx_-_programmiersprache:units:astro|std.astro]] | Letzte Aktualisierung: 2026-09-06 — Seite neu angelegt; erhoben aus ''std/coordinates/*.lyx''.