Lokales Koordinatensystem
Prosa-Definition¶
Ein lokales Koordinatensystem ist ein rechtshändiges kartesisches Bezugssystem (O_L, e_x^L, e_y^L, e_z^L) im dreidimensionalen affinen Raum, dessen Ursprung und Achsen einem konkreten Bauteil oder Konstruktionsteil zugeordnet sind und das durch eine eindeutige starre Transformation (Translation und Rotation) auf das Weltkoordinatensystem abgebildet wird.
Mathematische Definition¶
Sei
- 𝔸³ der dreidimensionale reelle affine Raum,
- W = (O_W, e_x, e_y, e_z, η, ω) das Weltkoordinatensystem gemäß
hg_weltkoordinatensystem.md, - O_L ∈ 𝔸³ ein in W festgelegter Ursprung des Lokalsystems,
- (e_x^L, e_y^L, e_z^L) eine Basis von ℝ³ mit den Eigenschaften
‖e_x^L‖ = ‖e_y^L‖ = ‖e_z^L‖ = 1, (Einheitsvektoren) ⟨e_x^L, e_y^L⟩ = ⟨e_y^L, e_z^L⟩ = ⟨e_z^L, e_x^L⟩ = 0, (paarweise orthogonal) e_x^L × e_y^L = e_z^L. (Rechtssystem)
Dann ist ein lokales Koordinatensystem das Tupel
L := (O_L, e_x^L, e_y^L, e_z^L, η_L),
wobei
- η_L : 𝔸³ → ℝ³ die Koordinatenabbildung
ist; die Komponenten sind in Millimeter zu interpretieren.
η_L(p) = (x_L, y_L, z_L) ⇔ p = O_L + x_L·e_x^L + y_L·e_y^L + z_L·e_z^L
Starre Transformation L → W¶
Die Beziehung zwischen L und W wird durch eine starre Transformation T_{L→W} ∈ SE(3) hergestellt, eindeutig bestimmt durch
- den Translations-Vektor t ∈ ℝ³ — die Welt-Koordinaten von O_L:
t := η(O_L) ∈ ℝ³, Längeneinheit mm. - die Rotation R ∈ SO(3) — die orthogonale Matrix mit Determinante
+1, deren Spalten die Welt-Koordinaten der lokalen Basisvektoren sind:
R := ( η(e_x^L) | η(e_y^L) | η(e_z^L) ) ∈ ℝ^{3×3}, R^T R = I, det R = +1.
Die Rechtssystem-Bedingung e_x^L × e_y^L = e_z^L ist äquivalent zu
det R = +1.
Aktive Wirkung auf einen Punkt mit lokalen Koordinaten p_L ∈ ℝ³:
T_{L→W}(p_L) := R · p_L + t (1)
— ergibt die Welt-Koordinaten desselben affinen Punktes. Die Inverse ist
T_{W→L}(q) := R^T · (q − t) = R^T · q − R^T · t (2)
(weil R^{-1} = R^T für R ∈ SO(3)).
Wirkung auf Verschiebungs-Vektoren: Differenzen zweier Punkte sind translationsinvariant. Folglich wirkt T_{L→W} auf einem Vektor v ∈ ℝ³ rein durch die Rotation:
T_{L→W}(v) := R · v. (3)
Diese Unterscheidung ist mathematisch zwingend, nicht bloß
konventionell: (R · p₂ + t) − (R · p₁ + t) = R · (p₂ − p₁).
Verschachtelung¶
Lokale Koordinatensysteme dürfen verschachtelt werden: Ein Lokalsystem L₂ kann statt direkt auf W auf ein übergeordnetes Lokalsystem L₁ bezogen sein. Sei dazu
- T_{L₁→W} = (R₁, t₁) die starre Transformation von L₁ nach W,
- T_{L₂→L₁} = (R₂, t₂) die starre Transformation von L₂ nach L₁, d. h. der Ursprung O_{L₂} und die Basis (e_x^{L₂}, e_y^{L₂}, e_z^{L₂}) sind in L₁-Koordinaten angegeben.
Dann ist die zusammengesetzte Transformation T_{L₂→W} eindeutig durch
T_{L₂→W}(p_{L₂}) = T_{L₁→W}(T_{L₂→L₁}(p_{L₂}))
= R₁ · (R₂ · p_{L₂} + t₂) + t₁
= (R₁ · R₂) · p_{L₂} + (R₁ · t₂ + t₁)
gegeben, also
T_{L₂→W} = (R₁ · R₂, R₁ · t₂ + t₁). (4)
Schreibt man die Komposition als binäre Operation ∘ mit Lese-
Reihenfolge "rechts wirkt zuerst", so ist
T_{L₂→W} = T_{L₁→W} ∘ T_{L₂→L₁}. (5)
Per Induktion lässt sich eine Kette L_n → L_{n−1} → … → L_1 → W beliebiger endlicher Tiefe wieder auf eine einzige starre Transformation in SE(3) reduzieren:
T_{L_n→W} = T_{L₁→W} ∘ T_{L₂→L₁} ∘ … ∘ T_{L_n→L_{n−1}}. (6)
(SE(3) ist eine Gruppe — Abgeschlossenheit unter Komposition, Existenz der Inversen, Identität — daher ist (6) wohldefiniert unabhängig von der Klammerung.)
Wohldefiniertheit¶
- Existenz: Zu jedem Welt-Punkt O_L und jeder Rechtssystem-Orthonormalbasis ist L durch (1) wohldefiniert; ein triviales Beispiel ist L = W mit t = 0, R = I.
- Eindeutigkeit der Transformation bei gegebenem L: Bei festgelegter
Wahl von O_L und (e_x^L, e_y^L, e_z^L) ist (R, t) durch
eindeutig bestimmt — die Spalten einer orthogonalen Matrix sind durch die abgebildeten Basisvektoren festgelegt.
t = η(O_L), R = (η(e_x^L) | η(e_y^L) | η(e_z^L)) - Eindeutigkeit von L bei gegebener Transformation: Umgekehrt legt ein Element (R, t) ∈ SE(3) das Lokalsystem L vollständig fest: O_L = O_W + t als affiner Punkt, und e_i^L ist das i-te Spaltenvektor von R, in W gelesen.
- Unabhängigkeit von der Komponenten-Wahl: η_L ist bei festgelegter Basis eine Bijektion 𝔸³ ↔ ℝ³; alle abgeleiteten Operationen (Differenz, Norm, Skalarprodukt, Kreuzprodukt) sind unter dieser Bijektion wohldefiniert und kommutieren mit T_{L→W}, weil R orthogonal mit Determinante +1 ist (Norm- und Orientierungs- Erhaltung).
- Wohldefiniertheit der Verschachtelung: SE(3) ist eine Gruppe
unter Komposition; (4) und (5) liefern wieder ein Element von
SE(3). Insbesondere ist
R₁ · R₂ ∈ SO(3)(Produkt orthogonaler Matrizen mit Determinante +1) undR₁ · t₂ + t₁ ∈ ℝ³(Summe endlicher Vektoren). Die Klammerungs-Unabhängigkeit folgt aus der Assoziativität der Gruppen-Operation. - Inverse: Aus (1) folgt T_{W→L} = (R^T, −R^T · t) ∈ SE(3); diese existiert für jedes Lokalsystem und ist selbst wieder eine starre Transformation.
- Konsistenz mit
hg_weltkoordinatensystem.md: W ist Spezialfall von L mit t = 0, R = I; in dieser Sicht ist W = T_{W→W} = (I, 0) Identitäts-Element von SE(3). - Numerische Stabilität bei verschachtelten Systemen: Bei
Verschachtelungstiefe n ≤ 10 und Bauteilabmessungen ≤ 10⁴ mm bleibt
der akkumulierte Translations-Fehler aus n-facher Komposition unter
IEEE 754 binary64 deutlich unter
Toleranzen.LAENGE_EPS. Bei sehr tiefen Hierarchien (n ≫ 10) ist eine periodische Re-Verankerung gegen W sinnvoll, ist aber nicht Bestandteil dieses Eintrags. - Nicht-Zirkularität: Die Definition stützt sich nur auf den
affinen Raum, das bereits definierte Weltkoordinatensystem, die
Primitive Punkt, Vektor, Einheitsvektor und auf
Toleranzen. L kommt nicht in seiner eigenen Definition vor.
Erläuterung (nicht normativ)¶
Der praktische Nutzen lokaler Koordinatensysteme im Holzbau ist die bauteileigene Geometrie-Beschreibung. Beispielsweise ist eine Sparrenkerve als geometrisches Muster im Sparren-Lokalsystem (x = Bauteillängsachse, y = Bauteilbreite, z = Bauteilhöhe) eine einfache Folge von Schnittebenen mit konstanten Koordinaten. Erst beim Einbau in eine Dachfläche wird dieselbe Kerve über die Sparren- Platzierung T_{Sparren→W} = (R, t) auf die im Dach gemeinsame Welt-Geometrie abgebildet — ein Sparren mit Neigung 35° hat im Welt-System eine schräg liegende Kerve, im Sparren-Lokalsystem aber weiterhin dieselbe horizontal-vertikale Form.
Die Verschachtelung bringt zwei weitere Strukturmerkmale:
- Hierarchie: Eine Versatz-Kerve eines Sparrens kann als Sub-Lokalsystem im Sparren-Lokal beschrieben werden; eine Bauteilgruppe (z. B. ein vorgefertigtes Dachmodul) kann als übergeordnetes Lokalsystem angelegt werden, in dem die einzelnen Sparren ihrerseits Lokalsysteme haben. Die Welt-Koordinaten ergeben sich automatisch aus der Komposition (6).
- Wiederverwendung: Identische Bauteile erhalten identische
Lokal-Geometrie und unterscheiden sich nur in der Platzierung
(R, t). Das ist dieselbe Idee wie in IFC (
IfcLocalPlacementmitPlacementRelTo) und in BTLx (Bauteil-CNC-Daten relativ zur Bauteil-Referenz-Seite).
Brücke zur Bauteil-/Element-Schicht (begrifflich vorbereitet, nicht¶
implementiert)
Dieser Eintrag bereitet die spätere Bauteil- und Element-Schicht begrifflich vor, ohne sie festzulegen:
- Bauteil-Lokal: Jedes Bauteil im Sinne von
hg_bauteil.mderhält genau ein primäres lokales Koordinatensystem L_B mit einer starren Transformation T_{L_B→W} ∈ SE(3) zur Welt. Welche Achse des L_B welcher Bauteilrichtung entspricht (z. B. x = Bauteilachse für Stabbauteile vs. z = Plattendicken-Achse für Plattenwerkstoffe), wird pro Bauteilkategorie in den entsprechenden Glossareinträgen festgelegt. - Subteil-Lokal / Verbindungs-Lokal: Geometrische Merkmale eines
Bauteils (Kerven, Bohrungen, Versätze, Anschnitte) und
Verbindungselemente (
hg_element.md) dürfen ihrerseits Lokalsysteme L_S besitzen, die relativ zu L_B definiert sind (Eltern-Kind- Relation): T_{L_S→W} = T_{L_B→W} ∘ T_{L_S→L_B}. - Konstruktionsgruppen-Lokal: Verschachtelung in der anderen Richtung — eine Bauteilgruppe (Dachstuhl-Modul, Wand-Element) erhält ein übergeordnetes Lokalsystem L_G, in dem die einzelnen Bauteil-Lokalsysteme L_B als Kinder hängen: T_{L_B→W} = T_{L_G→W} ∘ T_{L_B→L_G}.
Diese drei Verschachtelungs-Ebenen sind durch (6) mathematisch
vollständig abgedeckt; die zugehörigen Glossareinträge und ihre
Implementierungs-Klassen (Bauteil-Hierarchie, Szenengraph) sind
Folgearbeit der Phasen D7/D8 und nicht Gegenstand des vorliegenden
Eintrags. Die Code-Klasse LokalePlatzierung deckt die starre
Transformation als Einzelglied bereits ab (siehe
Implementierungshinweis), die Verkettung über mehrere Hierarchie-
Stufen ist begrifflich vorbereitet, aber noch nicht als
Datenstruktur implementiert.
Beziehungen¶
- Oberbegriff: keiner. Wie das Weltkoordinatensystem ist L eine
Modellierungs-Konvention, kein geometrisches Objekt im Modell. Ein
abstrakter Oberbegriff
koordinatensystemwürde erst sinnvoll, wenn er mitweltkoordinatensystemundlokales_koordinatensystemals Geschwistern eingeführt wird; bis dahin wird die Abgrenzung inline geführt. - Verwandte Begriffe:
- Weltkoordinatensystem (
hg_weltkoordinatensystem.md): das eindeutige globale Bezugssystem; jedes lokale System ist über eine starre Transformation auf W bezogen. - Bauteilachse (
hg_bauteilachse.md): eine ausgezeichnete Achse eines Bauteils; sie liefert typischerweise einen der drei lokalen Basisvektoren (häufig e_x^L), bestimmt aber das Lokalsystem nicht vollständig (zwei weitere Achsen fehlen). - Abgrenzung:
- Weltkoordinatensystem: global gültig, eindeutig; lokale Systeme sind bauteileigen und vielfach.
- Bauteilachse: einzelne Achse, kein vollständiges Koordinatensystem. Eine Bauteilachse kann eine Achse eines Lokalsystems sein, ist aber kein Synonym dafür.
- Achse (
hg_achse.md): allgemeine ausgezeichnete Linie; ohne Ursprungspunkt und ohne zwei weitere orthogonale Richtungen kein Koordinatensystem. - Bauteil (Folge-Eintrag, in
hg_bauteil.mdbereits angelegt): physikalisches Objekt; das Lokalsystem ist eine an das Bauteil geheftete Konvention, nicht das Bauteil selbst. - Element (Folge-Eintrag, in
hg_element.mdbereits angelegt): abstrakte Basisklasse für Bauteile, Verbindungsmittel, Verbinder, Verstärkungselemente; auch jedes Element trägt im Modell ein Lokalsystem, die Festlegung erfolgt in den jeweiligen Spezial-Einträgen. - LV95 / WGS84: externe Geo-Bezugssysteme; lokale Bauteilkoordinatensysteme werden nicht in LV95/WGS84 geführt, sondern intern in mm bezüglich W.
Implementierungshinweis¶
Bestehende Code-Realität (Stand D5-2):
Die starre Transformation T_{L→W} eines Lokalsystems ist in der
Domänen-Schicht durch die Klasse
zimmermann.domain.koordinaten.LokalePlatzierung repräsentiert; die
Drehkomponente R ∈ SO(3) ist in
zimmermann.domain.koordinaten.Rotation als Einheits-Quaternion
realisiert. Die im Code dokumentierten Operationen sind die
Referenz für diesen Glossareintrag — keine zusätzlichen Operationen
werden hier eingeführt.
package zimmermann.domain.koordinaten
/**
* Starre Transformation (Translation + Rotation) eines lokalen
* Koordinatensystems relativ zum Weltkoordinatensystem.
*
* Glossar: hg_lokales_koordinatensystem.md
*
* Felder-Semantik (normativ):
* - translation : Welt-Koordinaten des Lokal-Ursprungs O_L,
* entspricht t in der Glossar-Definition (Gleichung 1).
* - rotation : Orientierung der Lokal-Basis relativ zur Welt;
* entspricht R ∈ SO(3) als Einheits-Quaternion.
*
* Wirkung (Glossar Gleichung 1):
* p_welt = rotation.rotiere(p_lokal) + translation.
*/
public data class LokalePlatzierung internal constructor(
public val translation: Vektor,
public val rotation: Rotation,
) { /* … */ }
Im Code implementiert (LokalePlatzierung, vollständig durch
diesen Glossareintrag normativ gedeckt):
transformiere(p: Punkt) : Punkt— Wirkung (1) auf Punkte (Lokal → Welt).transformiere(v: Vektor) : Vektorundtransformiere(e: Einheitsvektor) : Einheitsvektor— Wirkung (3) auf Verschiebungs-Vektoren bzw. Richtungen, rein rotativ.inverseTransformiere(p: Punkt) : Punktetc. — Wirkung (2), T_{W→L}.inverse() : LokalePlatzierung— liefert (R^T, −R^T · t) als neuesLokalePlatzierung-Objekt; wohldefiniert für jede gültige Instanz.komponiere(other: LokalePlatzierung) : LokalePlatzierung— binäre Komposition gemäß (4) mit Lese-Reihenfolge "rechts wirkt zuerst":(this komponiere other).transformiere(p) = this.transformiere(other.transformiere(p)). Damit ist die Verschachtelung (5)/(6) auf der Code-Ebene als wiederholtekomponiere-Verkettung darstellbar.istGleichePlatzierung(other, eps)— Toleranz-basierter Vergleich unter Berücksichtigung der Quaternionen-Doppel-Überdeckung.IDENTITAET = LokalePlatzierung(Vektor.NULL, Rotation.IDENTITAET)— Identitäts-Element von SE(3), entspricht L = W.aus(translation, rotation) : Resultat<LokalePlatzierung, EntartetGeometrie>— Konstruktor mit Endlichkeits-Prüfung der Translation; Rotation trägt ihre Norm-Invariante per Typ.
Im Code implementiert (Rotation, R ∈ SO(3)):
rotiere(v: Vektor) : Vektor,rotiere(e: Einheitsvektor) : Einheitsvektor,rotiere(p: Punkt) : Punkt— Drehung um den Welt-Ursprung.inverse() : Rotation— konjugiertes Quaternion(w, −x, −y, −z).komponiere(other) : Rotation— Hamilton-Produktthis · other, Lese-Reihenfolge "rechts wirkt zuerst".istGleicheRotation(other, eps)— Vergleich unter Doppel- Überdeckung.IDENTITAET = (1, 0, 0, 0).ausAchseUndWinkel(achse: Einheitsvektor, winkel: Double) : Resultat<Rotation, EntartetGeometrie>— Rodrigues-/Quaternion- Konstruktionq = (cos(α/2), sin(α/2)·achse).ausQuaternion(w, x, y, z) : Resultat<Rotation, EntartetGeometrie>— Konstruktor mit Normierung und Endlichkeits-/Null-Prüfung.
Konventionen:
- Einheit: Translation in mm (Double); Rotation dimensionslos (Einheits-Quaternion). Niemals Mischung in einer Funktion.
- Konvention der starren Transformation: ausnahmslos
p_welt = R · p_lokal + t(Gleichung 1 dieses Eintrags); die passive KonventionR · (p_lokal − t')ist verboten. - Konvention der Komposition: ausnahmslos "rechts wirkt zuerst" (Gleichungen 4–6). Wer eine andere Reihenfolge benötigt, vertauscht die Operanden vor dem Aufruf.
- Wirkung auf Vektoren: rein rotativ (Gleichung 3). Eine
Translation auf einer Verschiebung anzuwenden ist mathematisch
falsch und in der Schnittstelle nicht möglich (
transformiere(v: Vektor)ruft nurrotation.rotiere(v)auf). - Verkettungs-Reihenfolge der Inverse:
T.inverse() ∘ T = idundT ∘ T.inverse() = id(jeweils im Sinne vonistGleichePlatzierung). Daraus folgt für eine KetteT_n ∘ … ∘ T_1: Inverse =T_1.inverse() ∘ … ∘ T_n.inverse().
Invarianten:
R^T · R = I ∧ det R = +1— strukturell garantiert durch die Einheits-Quaternion-Repräsentation inRotationund die Norm-Invariante der Companion-Factories.- Translation endlich (kein NaN, kein ±∞) — strukturell garantiert
durch
LokalePlatzierung.ausmitResultat-Wrapping und@ConsistentCopyVisibility. - Komposition zweier gültiger Platzierungen ist wieder eine gültige
Platzierung — folgt aus 1 und 2 sowie der Norm-Erhaltung von
Rotation.rotiere.
Edge Cases:
- L = W: Spezialfall
LokalePlatzierung.IDENTITAET, transformiert jeden Punkt strukturell-exakt auf sich selbst. - Reine Translation (R = I):
LokalePlatzierung(t, Rotation. IDENTITAET)mitt ≠ 0. Erlaubt; transformiere wirkt rein additiv. - Reine Rotation um O_W (t = 0): erlaubt; transformiere wirkt rein als Drehung um den Welt-Ursprung.
- Nicht-finite Translation: durch
LokalePlatzierung.ausausgeschlossen (Resultat.Fehler(EntartetGeometrie.NichtFinit)). - Null-Quaternion oder nicht-finite Quaternion-Komponenten:
durch
Rotation.ausQuaternionausgeschlossen (EntartetGeometrie.Nullrichtungbzw.EntartetGeometrie.NichtFinit). - Numerische Akkumulation bei tiefer Verschachtelung: bei Verschachtelungstiefe n ≤ 10 strukturell vernachlässigbar; tiefere Ketten siehe Wohldefiniertheit.
Verwendungsregel:
- Funktionen, die Punkte oder Vektoren entgegennehmen, gehen ohne
weitere Annotation davon aus, dass diese in W gegeben sind
(siehe
hg_weltkoordinatensystem.md, Verwendungsregel). - Lokale Koordinaten erhalten in der späteren Bauteil-Schicht einen
eigenen Wrapper-Typ (z. B.
BauteilLokal<T>) mit expliziternachWelt(platzierung: LokalePlatzierung) → T-Operation; eine implizite Reinterpretation lokaler Komponenten als Welt-Komponenten ist verboten. Der Wrapper-Typ ist Folgearbeit von D7/D8.
Quellen¶
Primär (normativ):
- ISO 19111:2019, „Geographic information — Referencing by coordinates".
- DIN ISO 80000-2:2022-08, „Größen und Einheiten – Teil 2: Mathematik".
- EN ISO 5459:2011, „Geometrische Produktspezifikation (GPS) – Bezüge und Bezugssysteme".
- ISO 10303-42:2022, „Industrial automation systems and integration
— Product data representation and exchange — Part 42: Integrated
generic resource: Geometric and topological representation"
(
axis2_placement_3d,cartesian_transformation_operator_3d). - ISO 16739-1:2024 (IFC 4.3), „Industry Foundation Classes for data
sharing in the construction and facility management industries"
(
IfcLocalPlacement,IfcAxis2Placement3D,PlacementRelTo).
Sekundär:
- Murray, R. M.; Li, Z.; Sastry, S. S.: A Mathematical Introduction to Robotic Manipulation. CRC Press 1994.
- Shoemake, K.: „Animating Rotation with Quaternion Curves." SIGGRAPH '85.
- Hartenberg, R. S.; Denavit, J.: Kinematic Synthesis of Linkages. McGraw-Hill 1964.
- Foley, J. D.; van Dam, A.; Feiner, S. K.; Hughes, J. F.: Computer Graphics — Principles and Practice. 2nd ed., Addison-Wesley 1996.
- Bronstein, I. N. et al.: Taschenbuch der Mathematik, Kap. 3.5.
Korpus (nicht autoritativ):
- Wikipedia, Lemmata „Koordinatensystem", „Rigid transformation", „SE(3)", „Scene graph" (abgerufen 2026-05-08).