Schnittgerade
Prosa-Definition¶
Eine Schnittgerade ist eine Gerade, die als Schnittmenge zweier Ebenen E₁ und E₂ entsteht und damit zugleich in beiden Ebenen liegt; sie existiert genau dann, wenn die Normalen der beiden Ebenen linear unabhängig sind, das heißt wenn die Ebenen weder identisch noch parallel disjunkt sind.
Mathematische Definition¶
Sei
- E₁ = (p₁, n_hat₁) und E₂ = (p₂, n_hat₂) zwei Ebenen im Sinne von
ebenein Hesse-Normalform, also mit normierten Normalen ‖n_hat₁‖ = ‖n_hat₂‖ = 1 und vorzeichenbehafteten Ursprungsabständen d₁ := ⟨n_hat₁, p₁⟩ und d₂ := ⟨n_hat₂, p₂⟩ (in mm), - ε_K := Toleranzen.KOLLINEAR_EPS die Kollinearitätstoleranz,
- ε_L := Toleranzen.LAENGE_EPS die Längentoleranz.
Existenzbedingung. Die Schnittgerade existiert genau dann, wenn
‖ n_hat₁ × n_hat₂ ‖ > ε_K (E)
(Normalen nicht kollinear).
Richtungsvektor. Unter Bedingung (E) ist
v := n_hat₁ × n_hat₂ ∈ ℝ³ \ {0},
t_hat := v / ‖v‖ ∈ S².
Stützpunkt. Unter Bedingung (E) ist
x₀ := ( d₁ · (n_hat₂ × t_hat) + d₂ · (t_hat × n_hat₁) ) / ‖v‖ (S)
ein Punkt mit ⟨n_hat₁, x₀⟩ = d₁ und ⟨n_hat₂, x₀⟩ = d₂, also x₀ ∈ E₁ ∩ E₂.
Schnittgerade. Die durch (E₁, E₂) erzeugte Schnittgerade g(E₁, E₂) ⊂ ℝ³ ist die Punktmenge
g(E₁, E₂) := E₁ ∩ E₂ = { x₀ + t · t_hat ∈ ℝ³ | t ∈ ℝ },
also die Gerade im Sinne von gerade mit Stützpunkt x₀ und
Richtungsvektor t_hat.
Anwendung als Funktion. Damit ist die Operation
Ebene × Ebene ⟶ Gerade ∪ {Entartet.ParalleleEbenen,
Entartet.IdentischeEbenen}
mit
schnittGerade(E₁, E₂) :=
Entartet.IdentischeEbenen, falls ‖n_hat₁ × n_hat₂‖ ≤ ε_K und
|⟨n_hat₁, p₂ − p₁⟩| ≤ ε_L
Entartet.ParalleleEbenen, falls ‖n_hat₁ × n_hat₂‖ ≤ ε_K und
|⟨n_hat₁, p₂ − p₁⟩| > ε_L
g(E₁, E₂), sonst.
Wohldefiniertheit¶
- Existenz unter (E): Aus ‖n_hat₁ × n_hat₂‖ > ε_K folgt v ≠ 0 und damit t_hat ∈ S². Der durch (S) konstruierte Punkt x₀ erfüllt ⟨n_hat₁, x₀⟩ = d₁ und ⟨n_hat₂, x₀⟩ = d₂; das ist eine direkte Konsequenz der Identitäten
⟨n_hat₁, n_hat₂ × t_hat⟩ = ⟨t_hat, n_hat₁ × n_hat₂⟩ = ‖v‖,
⟨n_hat₁, t_hat × n_hat₁⟩ = 0,
⟨n_hat₂, n_hat₂ × t_hat⟩ = 0,
⟨n_hat₂, t_hat × n_hat₁⟩ = ⟨t_hat, n_hat₁ × n_hat₂⟩ · (−1)·(−1) = ‖v‖,
hg_gerade.md.
- Vorzeichen der Richtung / Reihenfolge der Ebenen: Beim
Vertauschen von E₁ und E₂ wechselt v = n_hat₁ × n_hat₂ ↦ −v sein
Vorzeichen, t_hat ↦ −t_hat. Die durch (S) konstruierte Position x₀ ist
jedoch invariant: das Produkt d₁ · (n_hat₂ × t_hat) wird zu
d₂ · (n_hat₁ × (−t_hat)) = d₂ · (t_hat × n_hat₁) und entsprechend; insgesamt bleibt
x₀ unverändert. Als Gerade im Sinne von gerade gilt zudem
g(p₀, v) = g(p₀, −v), so dass
g(E₁, E₂) = g(E₂, E₁) als Punktmenge.
Die Schnittgerade ist als geometrisches Objekt in der Reihenfolge
der beiden erzeugenden Ebenen symmetrisch. Wo eine
Tangentenorientierung benötigt wird, muss der Aufrufer eine
Reihenfolge fixieren (siehe hg_grat.md, hg_kehle.md).
- Disjunktheit der Entartungen: Die Bedingung
‖n_hat₁ × n_hat₂‖ ≤ ε_K ist äquivalent zu „n_hat₁ und n_hat₂ kollinear (parallel
oder antiparallel)". In diesem Fall sind die Trägerebenen entweder
identisch (gleiche Hesse-Distanz, geprüft durch
|⟨n_hat₁, p₂ − p₁⟩| ≤ ε_L) oder echt parallel und disjunkt. Beide
Fälle sind disjunkt; die Fallunterscheidung in schnittGerade
ist erschöpfend.
- Konsistenz mit gerade: Unter (E) erfüllt (x₀, t_hat) die
Invarianten von gerade (t_hat ist Einheitsvektor, alle Komponenten
finit). Die Schnittgerade ist damit eine Gerade im Sinne des
Glossareintrags gerade.
- Nicht-Zirkularität: Die Definition stützt sich nur auf
gerade, ebene, vektor, einheitsvektor, punkt und
toleranzen; alle diese Begriffe sind zuvor definiert.
Erläuterung (nicht normativ)¶
Die Schnittgerade ist das geometrische Standardobjekt für jede Verschneidung zweier ebener Bauteilflächen oder Bezugsebenen. Im Holzbau tritt sie als geometrischer Träger in mindestens drei zentralen Rollen auf:
- als geometrischer Träger des Firsts (
first): Schnittgerade zweier Dachflächen-Trägerebenen, deren Schnittstrecke näherungsweise horizontal in der höchsten gemeinsamen Lage liegt; - als geometrischer Träger des Grats (
grat): Schnittgerade zweier Dachflächen-Trägerebenen, deren Schnittstrecke geneigt und konvex (ausspringend) verläuft; - als geometrischer Träger der Kehle (
kehle): Schnittgerade zweier Dachflächen-Trägerebenen, deren Schnittstrecke geneigt und konkav (einspringend) verläuft.
Allgemein ist die Schnittgerade die Trägergerade jeder Verschneidung zweier ebener Bauteilflächen — Wand zu Dach (Anschnitt am Wandkopf), Wand zu Wand (Innen- oder Außenecke), Dachfläche zu Schalung etc. Das tatsächliche Bauteil-Resultat ist in jedem Fall ein endliches Streckenstück auf dieser Schnittgerade, beschnitten auf den gemeinsamen Polygonbereich der beiden anliegenden Flächen.
Anschauliche Konstruktion (S): Der Term n_hat₂ × t_hat steht in E₁ orthogonal zur Schnittgerade (da er auf t_hat und auf n_hat₂ orthogonal steht und t_hat in E₁ liegt); analog steht t_hat × n_hat₁ in E₂ orthogonal zur Schnittgerade. Die Linearkombination mit den Koeffizienten d₁ und d₂ (skaliert mit 1/‖v‖) liefert genau jenen Punkt auf der Schnittgerade, dessen Stützung in der durch n_hat₁ und n_hat₂ aufgespannten Ebene liegt — geometrisch der Lotfußpunkt vom Ursprung auf die Schnittgerade.
Beziehungen¶
- Oberbegriff:
gerade. Jede Schnittgerade IST eine Gerade (eindimensionaler affiner Unterraum von ℝ³). Die Schnittgerade trägt zusätzlich die Information ihrer beiden Erzeuger-Ebenen, die für die Klassifikation nachgelagerter Bauteilrollen (First, Grat, Kehle) gebraucht wird. - Erzeuger (Komponenten der Erzeugung): zwei Ebenen E₁, E₂ im
Sinne von
ebenemit linear unabhängigen Normalen. - Spezialisierungen / Rollen: Die geometrischen Träger von
first,gratundkehlesind jeweils Schnittgeraden zweier Dachflächen-Trägerebenen, die durch zusätzliche Lagebedingungen (Neigung, Konvexität, Höhenmaximum) zu Dachkanten klassifiziert werden. - Abgrenzung:
- Gerade (
gerade): allgemein. Jede Schnittgerade ist eine Gerade, aber nicht jede Gerade ist eine Schnittgerade einer konkret gegebenen Ebenenpaarung. Eine als Schnittgerade klassifizierte Gerade trägt die Erzeuger-Information mit sich. - Strecke (
strecke): endlicher Ausschnitt einer Geraden zwischen zwei Endpunkten. Im Holzbau wird die Schnittgerade typischerweise auf den gemeinsamen Polygonbereich zweier Dachflächen beschnitten; das Ergebnis ist eine Strecke (oder ein Streckenzug), nicht die ganze Schnittgerade. - Schnittpunkt: Schnitt einer Geraden mit einer Ebene oder dreier Ebenen — nulldimensionales Ergebnis, keine Gerade. Eigener Folge-Eintrag möglich.
- Verschneidung (Operation): allgemeiner Begriff für jede Schnittoperation zwischen geometrischen Objekten. Die Schnittgerade ist eine spezielle Verschneidung (Ebene ∩ Ebene → Gerade). Andere Verschneidungen (Polygon ∩ Polygon, Strecke ∩ Ebene) liefern andere Ergebnistypen.
- Halbgerade (
halbgerade): einseitig begrenzter Ausschnitt einer Geraden. Die Schnittmenge zweier Ebenen ist niemals eine Halbgerade, sondern stets unbegrenzt zweiseitig.
Implementierungshinweis¶
Datentyp (Domänen-Schicht, Kotlin, Schicht domain.geometrie):
@ConsistentCopyVisibility
data class Schnittgerade internal constructor(
val gerade: Gerade, // zugrundeliegende Gerade (Stützpunkt + Richtung)
val ebeneA: Ebene, // Referenz auf E₁
val ebeneB: Ebene // Referenz auf E₂
) {
val stuetzpunkt: Punkt get() = gerade.stuetzpunkt // x₀ nach (S), in mm
val richtung: Einheitsvektor get() = gerade.richtung // t_hat, ‖t_hat‖² ≈ 1
}
Begründung der Komposition über gerade: Gerade (statt direkter Felder
stuetzpunkt und richtung): DRY — die Klasse Gerade (Glossareintrag
gerade, D2) kapselt bereits die Invarianten Stützpunkt + Einheitstangente
inklusive Validierung; eine Schnittgerade ist eine Gerade mit zusätzlicher
Erzeuger-Information, was sich strukturell als Komposition über Gerade
ausdrücken lässt. Der Konstruktor ist internal, damit Schnittgeraden
ausschließlich über die Companion-Factory entstehen können (Invarianten-
Schutz).
Konstruktor (Companion-Factory Schnittgerade.bilde, Wrapper über
Ebene.schnitt):
companion object {
fun bilde(
ebeneA: Ebene,
ebeneB: Ebene,
eps: Double = Toleranzen.KOLLINEAR_EPS
): Resultat<Schnittgerade, EntartetGeometrie> =
ebeneA.schnitt(ebeneB, eps).abbilden { gerade ->
Schnittgerade(gerade, ebeneA, ebeneB)
}
}
Die Methode Ebene.schnitt(other, eps): Resultat<Gerade, EntartetGeometrie>
führt den Schnitt-Algorithmus nach (S) durch und liefert eine reine
Gerade (ohne Erzeuger-Information). Schnittgerade.bilde reichert das
Erfolgs-Resultat um die Erzeuger-Ebenen an und propagiert den Fehlertyp
unverändert.
- Fehlertyp: gemeinsame Sealed-Hierarchie
EntartetGeometrie(Code-Pattern, kein Glossarbegriff; siehedomain/geometrie/EntartetGeometrie.kt). Die für Ebene-Ebene-Schnitt relevanten Varianten sind: EntartetGeometrie.IdentischeEbenen— ‖n_hat₁ × n_hat₂‖ ≤ KOLLINEAR_EPS und |⟨n_hat₁, p₂ − p₁⟩| ≤ LAENGE_EPS: Trägerebenen identisch, Schnittmenge ist eine Ebene, keine Gerade.EntartetGeometrie.ParalleleEbenen— ‖n_hat₁ × n_hat₂‖ ≤ KOLLINEAR_EPS und |⟨n_hat₁, p₂ − p₁⟩| > LAENGE_EPS: Trägerebenen echt parallel und disjunkt, Schnittmenge ist leer. Eine eigeneSchnittgeradeEntartet-Sealed-Class entfällt zugunsten der gemeinsamen Hierarchie (Konvention für alle D2/D3-Klassen).- Einheit: Stützpunkt-Koordinaten in mm (Double); Richtung
dimensionslos und auf Einheitslänge normiert (Typ
Einheitsvektor);ebeneAundebeneBsind Referenzen auf die ursprünglichenEbene-Werte (für nachgelagerte Klassifikation). - Invarianten (in Factory prüfen, niemals Exception):
- ‖richtung‖² ∈ [1 − Toleranzen.NORM_EPS, 1 + Toleranzen.NORM_EPS] (Einheits-Tangente; algorithmisch durch Konstruktion garantiert).
stuetzpunktliegt in beiden erzeugenden Ebenen: |signierterAbstand_E₁(stuetzpunkt)| ≤ Toleranzen.LAENGE_EPS und |signierterAbstand_E₂(stuetzpunkt)| ≤ Toleranzen.LAENGE_EPS.richtungsteht orthogonal zu beiden Normalen: |⟨richtung, n_hat₁⟩| ≤ Toleranzen.KOLLINEAR_EPS und |⟨richtung, n_hat₂⟩| ≤ Toleranzen.KOLLINEAR_EPS.- Alle Komponenten finit (kein NaN, kein ±∞).
- Edge Cases / Entartet-Varianten:
- ParalleleEbenen: ‖n_hat₁ × n_hat₂‖ ≤ KOLLINEAR_EPS und Hesse-Abstand der zweiten Ebene zur ersten > LAENGE_EPS; keine Schnittgerade existiert.
- IdentischeEbenen: ‖n_hat₁ × n_hat₂‖ ≤ KOLLINEAR_EPS und Hesse-Abstand ≤ LAENGE_EPS; die Schnittmenge ist eine ganze Ebene und damit keine Gerade.
- Nahezu parallel (‖n_hat₁ × n_hat₂‖ knapp über KOLLINEAR_EPS): zulässig, aber numerisch sensibel (Stützpunkt-Berechnung skaliert mit 1/‖v‖). Bei Bedarf kann der Aufrufer eine schärfere Toleranz übergeben.
- Nicht-finite Eingaben: durch Eingabe-Validierung der
Ebene-Konstruktoren bereits ausgeschlossen (siehehg_ebene.md). - Identität / Gleichheit: zwei Identitäts-Methoden, je nach benötigter Strenge:
istGleicheGerade(other, eps)— lockerer Test: vergleicht nur die zugrundeliegende Geraden-Punktmenge (delegiert anGerade.istGleich) und ignoriert die Erzeuger-Ebenen. Anwendungs fall: dieselbe Linie kann aus verschiedenen Ebenenpaaren entstehen — drei nicht-koplanare Ebenen, die sich in einer gemeinsamen Linie treffen, liefern paarweise unterschiedliche Schnittgeraden mit identischer Punktmenge; diese sindistGleicheGerade-äquivalent.istGleicheSchnittgerade(other, eps)— strenger Test: zusätzlich zur Geraden-Identität muss die Menge der Erzeuger-Ebenen gleich sein, ungeordnet verglichen viaEbene.istGleicheEbene:{ebeneA, ebeneB} = {other.ebeneA, other.ebeneB}. Anwendungsfall: wenn die Erzeuger-Information für nachgelagerte Klassifikation (First/Grat/Kehle) Teil der Identität ist. Direkter==-Vergleich auf der Datenklasse ist exakt-bitweise und unterscheidet daher Repräsentanten, deren Geraden- oder Erzeuger- Komponenten lediglich numerisch äquivalent sind; für geometrische Identität ist er ungeeignet.- Orientierung: Die Schnittgerade ist als Punktmenge
ungerichtet. Die in der Datenklasse gespeicherte Tangente
t_hat = n_hat₁ × n_hat₂ ist abhängig von der Reihenfolge (E₁, E₂); für
kanonische Tangentenorientierungen (z. B. „nach oben" bei
Grat/Kehle) ist eine zusätzliche Konvention im Aufrufer
festzulegen, siehe
hg_grat.mdundhg_kehle.md. - Abgeleitete Operationen:
fun beschneidenAuf(F1: Polygon, F2: Polygon): Resultat<Strecke, EntartetGeometrie>– Schnitt der Schnittgerade mit dem gemeinsamen Polygonbereich F(P₁) ∩ F(P₂); Grundlage für die Schnittstrecke s_{ij} aushg_first.md,hg_grat.md,hg_kehle.md. (Folgearbeit, nicht in D4-1 realisiert.)- Vergissfunktor zur reinen Geraden: über das Feld
geradedirekt zugänglich (schnittgerade.gerade : Gerade); keine separatealsGerade()-Methode nötig.
Quellen¶
Primär (normativ):
- DIN ISO 80000-2:2022-08, „Größen und Einheiten – Teil 2: Mathematik", Abschnitt 2.
Sekundär:
- Bronstein, I. N.; Semendjajew, K. A.; Musiol, G.; Mühlig, H.: Taschenbuch der Mathematik. Edition Harri Deutsch, aktuelle Auflage, Kap. 3.5.2.
- Bär, C.: Elementargeometrie. Springer Spektrum, Kap. 5.
- Fischer, G.: Lineare Algebra. 19. Aufl., Springer Spektrum 2020.
- de Berg, M.; Cheong, O.; van Kreveld, M.; Overmars, M.: Computational Geometry – Algorithms and Applications. 3. Aufl., Springer 2008.
Korpus (nicht autoritativ):
- Wikipedia, Lemma „Schnittgerade" (abgerufen 2026-05-08).