GA-FuL Projektstruktur

Inhaltsverzeichnis

  1. Übersicht
  2. Hauptmodule
  3. Verzeichnisstruktur
  4. AbhΓ€ngigkeiten
  5. Build-Konfiguration

Übersicht

Das GA-FuL-Projekt ist in mehrere Module unterteilt, die jeweils spezifische FunktionalitΓ€ten bereitstellen. Die Struktur folgt dem geschichteten Design der Bibliothek.

GeometricAlgebraFulcrumLib/
β”œβ”€β”€ GeometricAlgebraFulcrumLib/          # Hauptordner mit allen Modulen
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Algebra/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Modeling/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.MetaProgramming/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Utilities.*/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Applications/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Mathematica/
β”‚   β”œβ”€β”€ GeometricAlgebraFulcrumLib.Matlab/
β”‚   └── ...
β”œβ”€β”€ GeometricAlgebraFulcrumLib.Documentation/
β”œβ”€β”€ GeometricAlgebraFulcrumLib.Visualizations/
β”œβ”€β”€ docs/                                 # Diese Dokumentation
β”œβ”€β”€ assets/
β”œβ”€β”€ README.adoc
└── LICENSE

Hauptmodule

Kern-Module (Algebra-Schicht)

1. GeometricAlgebraFulcrumLib.Algebra

Zweck: Kern-Algebra-Implementierung

Hauptkomponenten:

  • GeometricAlgebra/: GA-Operationen und Multivektoren
    • Basis/: Basis-Blades und Index-Sets
    • Dense/: Optimierte Dense-Implementierung
    • Extended/: Erweiterte GA (XGa)
    • Restricted/: EingeschrΓ€nkte GA (RGa)
  • ComplexAlgebra/: Komplexe Zahlen
  • LinearAlgebra/: Vektoren, Matrizen, Tensoren
  • Scalars/: Skalar-Prozessoren
  • GeometricFrequency/: Spektralanalyse

AbhΓ€ngigkeiten:

  • MathNet.Numerics
  • PeterO.Numbers
  • AngouriMath
  • NumpyDotNet

Wichtige Klassen:

GeometricAlgebra/
β”œβ”€β”€ XGaProcessor<T>              # Haupt-GA-Prozessor
β”œβ”€β”€ XGaMultivector<T>            # Multivektor
β”œβ”€β”€ XGaKVector<T>                # k-Vektor
β”œβ”€β”€ XGaBasisBlade               # Basis-Blade
β”œβ”€β”€ XGaMetric                   # Metrik-Definition
└── Composers/
    └── XGaMultivectorComposer<T>  # Multivektor-Builder

2. GeometricAlgebraFulcrumLib.Utilities.Structures

Zweck: Grundlegende Datenstrukturen

Hauptkomponenten:

  • IndexSets/: Implementierungen von IIndexSet
  • Dictionaries/: Optimierte Dictionary-Implementierungen
  • Collections/: Spezialisierte Collections
  • BitManipulation/: Bit-Operationen fΓΌr effiziente Index-Sets

Wichtige Klassen:

IndexSets/
β”œβ”€β”€ IIndexSet                    # Interface
β”œβ”€β”€ EmptyIndexSet               # Leere Menge
β”œβ”€β”€ SingleIndexSet              # Ein Element
β”œβ”€β”€ UInt64IndexSet              # FΓΌr Dimension < 64
β”œβ”€β”€ DenseIndexSet               # Dense-Array
└── SparseIndexSet              # Sparse-HashSet

3. GeometricAlgebraFulcrumLib.Utilities.Text

Zweck: Text- und LaTeX-Generierung

Hauptkomponenten:

  • Text/: Formatierte Text-Generierung
  • LaTeX/: LaTeX-Code-Composition
  • Parametric/: Template-basierte Text-Generierung
  • Files/: Datei- und Ordner-Hierarchie-Erstellung

4. GeometricAlgebraFulcrumLib.Utilities.Code

Zweck: Code-Generierungs-Utilities

Hauptkomponenten:

  • SyntaxTree/: Abstract Syntax Trees (AST)
  • Languages/: Sprach-spezifische Code-Generatoren
  • Expressions/: Expression-ReprΓ€sentationen

5. GeometricAlgebraFulcrumLib.Utilities.Web

Zweck: Web-Grafik-Utilities

Hauptkomponenten:

  • Svg/: SVG-Generierung
  • Html/: HTML-Generierung
  • JavaScript/: JavaScript-Code-Generierung
  • BabylonJs/: Babylon.js-Integration

Modellierungs-Module

6. GeometricAlgebraFulcrumLib.Modeling

Zweck: Geometrische Modellierung

Hauptkomponenten:

  • Geometry/: Geometrische Objekte
    • CGa/: Conformal Geometric Algebra
    • PGa/: Projective Geometric Algebra
    • Euclidean/: Euklidische Geometrie
  • Graphics/: Grafik-Primitiven
  • Calculus/: Geometrischer KalkΓΌl (in Entwicklung)

Wichtige Klassen:

Geometry/
└── CGa/
    β”œβ”€β”€ CGaGeometricSpace5D<T>      # 5D-CGA fΓΌr 3D-Geometrie
    β”œβ”€β”€ CGaGeometricSpace4D<T>      # 4D-CGA fΓΌr 2D-Geometrie
    └── Encoding/
        β”œβ”€β”€ EncodeIpnsRound         # IPNS Round-Objects
        β”œβ”€β”€ EncodeOpnsFlat          # OPNS Flat-Objects
        └── Decode                  # Dekodierung

Metaprogrammierungs-Module

7. GeometricAlgebraFulcrumLib.MetaProgramming

Zweck: Code-Generierung und Optimierung

Hauptkomponenten:

  • Context/: Meta-Kontext
  • Expressions/: Meta-Expressions
  • Composers/: Code-Composer
  • Optimizers/: Code-Optimierer
  • Applications/: Anwendungsbeispiele

Wichtige Klassen:

MetaProgramming/
β”œβ”€β”€ MetaContext                  # Haupt-Kontext
β”œβ”€β”€ IMetaExpression              # Expression-Interface
β”œβ”€β”€ MetaExpressionComposer       # Expression-Builder
β”œβ”€β”€ CodeComposer                 # Code-Generator
└── Optimizers/
    β”œβ”€β”€ ConstantPropagation
    β”œβ”€β”€ CommonSubexpressionElimination
    └── GeneticProgramming

Integrations-Module

8. GeometricAlgebraFulcrumLib.Mathematica

Zweck: Wolfram Mathematica Integration

Hauptkomponenten:

  • Processors/: Mathematica-Skalar-Prozessor
  • Expressions/: Mathematica-Expression-Wrapper
  • Utilities/: Hilfsfunktionen

AbhΓ€ngigkeiten:

  • Wolfram.NETLink

9. GeometricAlgebraFulcrumLib.Matlab

Zweck: MATLAB Integration und Toolbox

Hauptkomponenten:

  • GA-FuL MATLAB Toolbox/: VollstΓ€ndige MATLAB-Toolbox
  • Processors/: MATLAB-Skalar-Prozessor
  • CodeGeneration/: MATLAB-Code-Generierung

Features:

  • MATLAB-Funktions-Generierung
  • GA-Operationen in MATLAB
  • Visualisierung

Anwendungs-Module

10. GeometricAlgebraFulcrumLib.Applications

Zweck: Allgemeine Anwendungsbeispiele

Hauptkomponenten:

  • Verschiedene Anwendungsbeispiele fΓΌr GA-FuL
  • Demos und Tutorials

11. GeometricAlgebraFulcrumLib.Applications.Symbolic

Zweck: Symbolische Anwendungen

Hauptkomponenten:

  • Symbolische GA-Berechnungen
  • Mathematica-basierte Anwendungen

12. GeometricAlgebraFulcrumLib.Samples.Generations

Zweck: Code-Generierungs-Beispiele

Hauptkomponenten:

  • Code-Generierungs-Samples
  • Template-Beispiele

ZusΓ€tzliche Module

13. GeometricAlgebraFulcrumLib.MonoGame

Zweck: MonoGame-Integration fΓΌr Spiele und Grafik


14. GeometricAlgebraFulcrumLib.Stride

Zweck: Stride Game Engine Integration


15. GeometricAlgebraFulcrumLib.Optimization

Zweck: Optimierungsalgorithmen


16. GeometricAlgebraFulcrumLib.Benchmarks

Zweck: Performance-Benchmarks

Tools:

  • BenchmarkDotNet
  • Performance-Tests

17. GeometricAlgebraFulcrumLib.UnitTests

Zweck: Unit-Tests

Framework:

  • xUnit oder NUnit

Verzeichnisstruktur

Typische Modul-Struktur

GeometricAlgebraFulcrumLib.ModuleName/
β”œβ”€β”€ GeometricAlgebraFulcrumLib.ModuleName.csproj
β”œβ”€β”€ Namespace1/
β”‚   β”œβ”€β”€ Class1.cs
β”‚   β”œβ”€β”€ Class2.cs
β”‚   └── Subfolder/
β”‚       └── Class3.cs
β”œβ”€β”€ Namespace2/
β”‚   └── ...
└── Properties/
    └── AssemblyInfo.cs (optional)

Beispiel: Algebra-Modul

GeometricAlgebraFulcrumLib.Algebra/
β”œβ”€β”€ GeometricAlgebraFulcrumLib.Algebra.csproj
β”œβ”€β”€ Scalars/
β”‚   β”œβ”€β”€ IScalarProcessor.cs
β”‚   β”œβ”€β”€ ScalarProcessorOfFloat64.cs
β”‚   β”œβ”€β”€ ScalarProcessorOfFloat32.cs
β”‚   └── ...
β”œβ”€β”€ GeometricAlgebra/
β”‚   β”œβ”€β”€ Basis/
β”‚   β”‚   β”œβ”€β”€ IIndexSet.cs
β”‚   β”‚   β”œβ”€β”€ XGaBasisBlade.cs
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ Extended/
β”‚   β”‚   β”œβ”€β”€ XGaProcessor.cs
β”‚   β”‚   β”œβ”€β”€ XGaMultivector.cs
β”‚   β”‚   β”œβ”€β”€ XGaKVector.cs
β”‚   β”‚   └── Composers/
β”‚   β”‚       └── XGaMultivectorComposer.cs
β”‚   └── Restricted/
β”‚       β”œβ”€β”€ RGaProcessor.cs
β”‚       └── ...
β”œβ”€β”€ LinearAlgebra/
β”‚   β”œβ”€β”€ Vectors/
β”‚   β”œβ”€β”€ Matrices/
β”‚   └── Tensors/
└── ComplexAlgebra/
    └── ...

AbhΓ€ngigkeiten

AbhΓ€ngigkeits-Graph

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Applications, Samples, Tests      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  MetaProgramming, Mathematica       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Modeling                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Algebra                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Utilities (Text, Code,         β”‚
β”‚      Structures, Web)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

NuGet-Pakete

Algebra-Modul:

<PackageReference Include="AngouriMath" Version="1.3.0" />
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
<PackageReference Include="PeterO.Numbers" Version="1.8.2" />
<PackageReference Include="NumpyDotNet" Version="0.9.87.2" />
<PackageReference Include="OxyPlot.Core" Version="2.2.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.10" />
<PackageReference Include="EPPlus" Version="8.0.7" />
<PackageReference Include="Dew.Math" Version="6.2.3" />

Mathematica-Modul:

<Reference Include="Wolfram.NETLink" />

Build-Konfiguration

.NET-Konfiguration

Alle Projekte verwenden:

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <LangVersion>latest</LangVersion>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Build-Befehle

Gesamte Solution bauen:

cd GeometricAlgebraFulcrumLib
dotnet build GeometricAlgebraFulcrumLib.sln

Spezifisches Projekt bauen:

cd GeometricAlgebraFulcrumLib/GeometricAlgebraFulcrumLib.Algebra
dotnet build

Tests ausfΓΌhren:

cd GeometricAlgebraFulcrumLib/GeometricAlgebraFulcrumLib.UnitTests
dotnet test

Release-Build:

dotnet build -c Release

Namenskonventionen

Assembly-Namen

Format: GeometricAlgebraFulcrumLib.<ModuleName>

Beispiele:

  • GeometricAlgebraFulcrumLib.Algebra
  • GeometricAlgebraFulcrumLib.Modeling
  • GeometricAlgebraFulcrumLib.MetaProgramming

Namespace-Konventionen

Format: GeometricAlgebraFulcrumLib.<ModuleName>.<SubNamespace>

Beispiele:

  • GeometricAlgebraFulcrumLib.Algebra.Scalars
  • GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Basis
  • GeometricAlgebraFulcrumLib.Modeling.Geometry.CGa

Klassen-PrΓ€fixe

PrΓ€fix Bedeutung Beispiel
XGa Extended GA XGaProcessor<T>
RGa Restricted GA RGaProcessor<T>
CGa Conformal GA CGaGeometricSpace5D<T>
PGa Projective GA PGaGeometricSpace<T>
Float64 64-bit float optimiert RGaFloat64Multivector

Zusammenfassung

Die Projektstruktur von GA-FuL:

βœ“ Modular: Klare Trennung der Verantwortlichkeiten βœ“ Geschichtet: Von Utilities bis Applications βœ“ Erweiterbar: Einfaches HinzufΓΌgen neuer Module βœ“ Gut organisiert: Konsistente Namenskonventionen βœ“ Dokumentiert: Klare Struktur und AbhΓ€ngigkeiten


← ZurΓΌck zur Hauptdokumentation