====== std.circle ====== Geometrie-Primitive für Kreise (''Circle''), eindimensionale Wertebereiche (''Range'') und 2D-Bereiche (''Range2D''). Berechnet Fläche, Umfang, Durchmesser, prüft Überschneidungen mit anderen Kreisen und Rechtecken (''CircleIntersectsRect''), testet ob ein Punkt im Kreis liegt und berechnet den minimalen Bounding-Rect. ''Range'' und ''Range2D'' ergänzen die Geometriebibliothek um Intervall-Operationen (Schnittmenge, Vereinigung, Inflation). Einsatzbereiche: Kollisionserkennung in Spielen und Physik-Simulationen, TUI-Layout-Berechnungen, geografische Näherungsabfragen. **Autor:** Andreas Röne\\ **Copyright:** 2024-2025 Andreas Röne ---- ===== Imports ===== * ''[[lyx_-_programmiersprache:units:vector|std.vector]]'' * ''[[lyx_-_programmiersprache:units:math|std.math]]'' * ''[[lyx_-_programmiersprache:units:rect|std.rect]]'' ---- ===== Typen ===== ==== Circle (struct) ==== ^ Feld ^ Typ ^ ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''CircleNew(center: Vec2, radius: int64): Circle'' | pub | Erstellt Kreis aus Mittelpunkt und Radius | | ''CircleFromXYR(x: int64, y: int64, r: int64): Circle'' | pub | Erstellt Kreis aus Koordinaten und Radius | | ''CircleFromPoints(p1: Vec2, p2: Vec2): Circle'' | pub | Erstellt Kreis aus zwei Punkten als Durchmesser | | ''CircleUnit(): Circle'' | pub | Gibt Einheitskreis mit Radius 1 zurück | | ''CircleDiameter(c: Circle): int64'' | pub | Berechnet den Durchmesser des Kreises | | ''CircleArea(c: Circle): int64'' | pub | Berechnet die Fläche des Kreises | | ''CircleCircumference(c: Circle): int64'' | pub | Berechnet den Umfang des Kreises | | ''CircleIsEmpty(c: Circle): bool'' | pub | Prüft ob Radius null oder negativ ist | | ''CircleContainsPoint(c: Circle, p: Vec2): bool'' | pub | Prüft ob Punkt im Kreis liegt | | ''CircleContainsCircle(c: Circle, inner: Circle): bool'' | pub | Prüft ob innerer Kreis vollständig enthalten ist | | ''CircleIntersectsCircle(a: Circle, b: Circle): bool'' | pub | Prüft Überschneidung zweier Kreise | | ''CircleIntersectsRect(c: Circle, r: Rect): bool'' | pub | Prüft Überschneidung von Kreis und Rechteck | | ''CircleExpand(c: Circle, amount: int64): Circle'' | pub | Vergrößert Kreis um angegebenen Betrag | | ''CircleUnion(a: Circle, b: Circle): Circle'' | pub | Berechnet minimalen Kreis um beide Kreise | | ''CircleDistanceToPoint(c: Circle, p: Vec2): int64'' | pub | Berechnet Abstand von Kreisrand zu Punkt | | ''CircleDistanceToCircle(c: Circle, other: Circle): int64'' | pub | Berechnet Abstand zwischen zwei Kreisrändern | | ''CircleBoundingRect(c: Circle): Rect'' | pub | Liefert umschließendes Rechteck des Kreises | | ''CircleEqual(a: Circle, b: Circle): bool'' | pub | Vergleicht zwei Kreise auf Gleichheit | ==== Range (struct) ==== ^ Feld ^ Typ ^ | ''min'' | ''int64'' | | ''max'' | ''int64'' | ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''RangeNew(min: int64, max: int64): Range'' | pub | Erstellt Wertebereich aus Min und Max | | ''RangeFromValue(value: int64, delta: int64): Range'' | pub | Erstellt Bereich um Wert mit Delta | | ''RangeEmpty(): Range'' | pub | Liefert leeren Wertebereich zurück | | ''RangeLength(r: Range): int64'' | pub | Berechnet Länge des Wertebereichs | | ''RangeCenter(r: Range): int64'' | pub | Berechnet Mittelpunkt des Bereichs | | ''RangeIsEmpty(r: Range): bool'' | pub | Prüft ob Bereich leer ist | | ''RangeContains(r: Range, value: int64): bool'' | pub | Prüft ob Wert im Bereich liegt | | ''RangeContainsExclusive(r: Range, value: int64): bool'' | pub | Prüft Zugehörigkeit ohne Randwerte | | ''RangeContainsRange(r: Range, inner: Range): bool'' | pub | Prüft ob innerer Bereich enthalten ist | | ''RangeIntersects(r: Range, other: Range): bool'' | pub | Prüft Überschneidung zweier Bereiche | | ''RangeIntersection(r: Range, other: Range): Range'' | pub | Berechnet Schnittmenge zweier Bereiche | | ''RangeExpand(r: Range, value: int64): Range'' | pub | Dehnt Bereich auf Wert aus | | ''RangeUnion(r: Range, other: Range): Range'' | pub | Berechnet Vereinigung zweier Bereiche | | ''RangeInflate(r: Range, amount: int64): Range'' | pub | Vergrößert Bereich beidseitig um Betrag | ==== Range2D (struct) ==== ^ Feld ^ Typ ^ | ''x'' | ''Range'' | | ''y'' | ''Range'' | ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''Range2DNew(x_range: Range, y_range: Range): Range2D'' | pub | Erstellt 2D-Bereich aus X- und Y-Range | | ''Range2DFromPoints(p1: Vec2, p2: Vec2): Range2D'' | pub | Erstellt 2D-Bereich aus zwei Punkten | | ''Range2DFromRect(r: Rect): Range2D'' | pub | Konvertiert Rechteck in 2D-Bereich | | ''Range2DToRect(r2d: Range2D): Rect'' | pub | Konvertiert 2D-Bereich in Rechteck | | ''Range2DContains(r2d: Range2D, p: Vec2): bool'' | pub | Prüft ob Punkt im 2D-Bereich liegt | | ''Range2DIntersects(r2d: Range2D, other: Range2D): bool'' | pub | Prüft Überschneidung zweier 2D-Bereiche |