GA-FuL API-Referenz
Inhaltsverzeichnis
- Ăbersicht
- Skalar-Prozessoren
- GA-Prozessoren
- Multivektoren
- Basis-Blades
- Conformal GA
- Metaprogrammierung
- Utilities
Ăbersicht
Diese API-Referenz bietet eine Ăbersicht ĂŒber die wichtigsten Klassen und Methoden in GA-FuL. FĂŒr vollstĂ€ndige Details siehe den Source-Code und IntelliSense-Dokumentation.
Skalar-Prozessoren
IScalarProcessor<T>
Namespace: GeometricAlgebraFulcrumLib.Algebra.Scalars
Beschreibung: Interface fĂŒr Skalar-Operationen
Wichtige Methoden:
public interface IScalarProcessor<T>
{
// Arithmetik
T Add(T a, T b);
T Subtract(T a, T b);
T Times(T a, T b);
T Divide(T a, T b);
T Negative(T a);
T Power(T a, T b);
// Trigonometrie
T Sin(T a);
T Cos(T a);
T Tan(T a);
T ArcSin(T a);
T ArcCos(T a);
T ArcTan(T a);
T ArcTan2(T y, T x);
// Exponential und Logarithmus
T Exp(T a);
T Log(T a);
T Log10(T a);
T Sqrt(T a);
// Vergleiche
bool IsZero(T a);
bool IsOne(T a);
bool IsMinusOne(T a);
bool IsPositive(T a);
bool IsNegative(T a);
// Konstanten
T Zero { get; }
T One { get; }
T MinusOne { get; }
}
ScalarProcessorOfFloat64
Namespace: GeometricAlgebraFulcrumLib.Algebra.Scalars
Beschreibung: Skalar-Prozessor fĂŒr 64-bit Gleitkommazahlen
Verwendung:
// Singleton-Instanz
var sp = ScalarProcessorOfFloat64.Instance;
// Operationen
var result = sp.Add(1.0, 2.0); // 3.0
var sin = sp.Sin(Math.PI / 2); // 1.0
Weitere Prozessoren:
ScalarProcessorOfFloat32: 32-bit floatsScalarProcessorOfDecimal: DecimalScalarProcessorOfRational: Rationale ZahlenScalarProcessorOfComplex: Komplexe ZahlenScalarProcessorOfMathematica: Symbolische AusdrĂŒcke
Scalar<T>
Namespace: GeometricAlgebraFulcrumLib.Algebra.Scalars
Beschreibung: Thin-Wrapper fĂŒr einfachere Skalar-Operationen
Eigenschaften:
public class Scalar<T>
{
public IScalarProcessor<T> Processor { get; }
public T Value { get; }
}
Operatoren:
var sp = ScalarProcessorOfFloat64.Instance;
var a = new Scalar<double>(sp, 2.0);
var b = new Scalar<double>(sp, 3.0);
// Arithmetische Operatoren
var sum = a + b; // 5.0
var diff = a - b; // -1.0
var product = a * b; // 6.0
var quotient = a / b; // 0.666...
// Vergleiche
bool eq = a == b; // false
bool lt = a < b; // true
GA-Prozessoren
XGaFloat64Processor (Vereinfachte Float64 API)
Namespace: GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Float64.Processors
Beschreibung: Vereinfachter Float64-spezifischer GA-Prozessor (empfohlen fĂŒr die meisten Benutzer)
Konstruktion:
// Euklidisch (alle +1) - Am hÀufigsten
var processor = XGaFloat64Processor.Euclidean;
// Konformal (1 negative Signatur)
var conformal = XGaFloat64Processor.Conformal;
// Projektiv (1 Null-Signatur)
var projective = XGaFloat64Processor.Projective;
// Benutzerdefinierte Metrik
var custom = XGaFloat64Processor.Create(
negativeCount: 1, // Anzahl -1 Quadrate
zeroCount: 0 // Anzahl 0 Quadrate
);
XGaProcessor<T> (Generische API)
Namespace: GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Extended
Beschreibung: Generischer GA-Prozessor fĂŒr benutzerdefinierte Skalartypen (Rational, Symbolic, etc.)
Konstruktion:
// FĂŒr nicht-Float64 Typen (z.B. Rational, Symbolic)
var scalarProcessor = ScalarProcessorOfRational.Instance;
var processor = XGaProcessor<Rational>.CreateEuclidean(scalarProcessor);
Wichtige Eigenschaften:
public class XGaProcessor<T>
{
public IScalarProcessor<T> ScalarProcessor { get; }
public XGaMetric Metric { get; }
public int VSpaceDimensions { get; }
public int GaSpaceDimensions { get; } // 2^VSpaceDimensions
}
Factory-Methoden:
// Skalare
XGaScalar<T> CreateScalar(T value);
// Vektoren (ĂŒber Composer)
var vector = processor.CreateComposer()
.SetVectorTerm(0, x)
.SetVectorTerm(1, y)
.SetVectorTerm(2, z)
.GetVector();
// Basis-Vektoren
XGaVector<T> CreateBasisVector(int index);
// Bivektoren (ĂŒber Composer)
var bivector = processor.CreateBivectorComposer()
.SetBivectorTerm(0, 1, xy)
.SetBivectorTerm(0, 2, xz)
.SetBivectorTerm(1, 2, yz)
.GetBivector();
// Composer
XGaMultivectorComposer<T> CreateComposer();
Multivektoren
XGaMultivector<T>
Namespace: GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Extended
Beschreibung: Generischer Multivektor
Eigenschaften:
public class XGaMultivector<T>
{
public XGaProcessor<T> Processor { get; }
public IReadOnlyDictionary<int, XGaKVector<T>> KVectors { get; }
// Grades
public IEnumerable<int> Grades { get; }
public int MinGrade { get; }
public int MaxGrade { get; }
// Tests
public bool IsZero { get; }
public bool IsScalar { get; }
public bool IsVector { get; }
public bool IsBivector { get; }
public bool IsKVector { get; }
}
Produkte:
// Geometrisches Produkt
XGaMultivector<T> Gp(XGaMultivector<T> other);
// ĂuĂeres Produkt (Outer/Wedge)
XGaMultivector<T> Op(XGaMultivector<T> other);
// Linke Kontraktion (Left Contraction)
XGaMultivector<T> Lcp(XGaMultivector<T> other);
// Rechte Kontraktion (Right Contraction)
XGaMultivector<T> Rcp(XGaMultivector<T> other);
// Skalarprodukt
Scalar<T> Sp(XGaMultivector<T> other);
// Fat Dot Product
XGaMultivector<T> Fdp(XGaMultivector<T> other);
// Hestenes Inner Product
XGaMultivector<T> Hip(XGaMultivector<T> other);
// Commutator Product
XGaMultivector<T> Cp(XGaMultivector<T> other);
// Anti-Commutator Product
XGaMultivector<T> Acp(XGaMultivector<T> other);
UnÀre Operationen:
// Reverse (Umkehrung)
XGaMultivector<T> Reverse();
// Grade Involution
XGaMultivector<T> GradeInvolution();
// Clifford Conjugate
XGaMultivector<T> CliffordConjugate();
// Dual
XGaMultivector<T> Dual();
XGaMultivector<T> UnDual();
// Negation
XGaMultivector<T> Negative();
// Magnitude
Scalar<T> Norm();
Scalar<T> NormSquared();
// Normalisierung
XGaMultivector<T> Normalize();
XGaMultivector<T> DivideByNorm();
// Inverse
XGaMultivector<T> Inverse();
// Exponential und Logarithmus
XGaMultivector<T> Exp();
XGaMultivector<T> Log();
Grade-Extraktion:
// Spezifischer Grade
XGaKVector<T> GetKVectorPart(int grade);
// Skalarteil
XGaScalar<T> GetScalarPart();
// Vektorteil
XGaVector<T> GetVectorPart();
// Bivektorteil
XGaBivector<T> GetBivectorPart();
// Nur gerade/ungerade Grades
XGaMultivector<T> GetEvenPart();
XGaMultivector<T> GetOddPart();
Arithmetik:
// Addition
XGaMultivector<T> Add(XGaMultivector<T> other);
// Subtraktion
XGaMultivector<T> Subtract(XGaMultivector<T> other);
// Skalare Multiplikation
XGaMultivector<T> Times(T scalar);
XGaMultivector<T> Divide(T scalar);
// Operatoren
var sum = mv1 + mv2;
var diff = mv1 - mv2;
var scaled = 2.0 * mv1;
XGaMultivectorComposer<T>
Namespace: GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Extended.Composers
Beschreibung: Builder fĂŒr Multivektoren
Verwendung:
var composer = processor.CreateComposer();
// Terme hinzufĂŒgen
composer.SetTerm(indexSet, scalar);
composer.AddTerm(indexSet, scalar);
// Basis-Blades hinzufĂŒgen
composer.SetBasisBladeScalar(id, scalar);
composer.AddBasisBladeScalar(id, scalar);
// Spezielle Terme
composer.SetScalarTerm(scalar);
composer.SetVectorTerm(index, scalar);
composer.SetBivectorTerm(index1, index2, scalar);
// Multivektor erstellen
var multivector = composer.GetMultivector();
// Oder spezifischen Typ
var scalar = composer.GetScalar();
var vector = composer.GetVector();
var bivector = composer.GetBivector();
var kVector = composer.GetKVector(grade);
Basis-Blades
XGaBasisBlade
Namespace: GeometricAlgebraFulcrumLib.Algebra.GeometricAlgebra.Basis
Beschreibung: ReprÀsentiert ein Basis-Blade
Eigenschaften:
public class XGaBasisBlade
{
public IIndexSet IndexSet { get; }
public int Grade { get; }
public ulong Id { get; } // FĂŒr Grade < 64
}
Konstruktion:
// Ăber Processor
var e1 = processor.CreateBasisVector(0);
var e2 = processor.CreateBasisVector(1);
var e12 = processor.CreateBasisBivector(0, 1);
// Direkt
var blade = new XGaBasisBlade(indexSet);
Operationen:
// Produkte
XGaSignedBasisBlade Gp(XGaBasisBlade other, XGaMetric metric);
XGaSignedBasisBlade Op(XGaBasisBlade other);
XGaSignedBasisBlade Lcp(XGaBasisBlade other, XGaMetric metric);
// UnÀre Operationen
XGaBasisBlade Reverse();
XGaBasisBlade GradeInvolution();
IIndexSet
Namespace: GeometricAlgebraFulcrumLib.Utilities.Structures.IndexSets
Beschreibung: Interface fĂŒr Index-Mengen
Methoden:
public interface IIndexSet
{
int Count { get; }
bool Contains(int index);
IEnumerable<int> GetIndices();
bool IsSubsetOf(IIndexSet other);
bool Overlaps(IIndexSet other);
IIndexSet Union(IIndexSet other);
IIndexSet Intersect(IIndexSet other);
IIndexSet Except(IIndexSet other);
}
Conformal GA
CGaGeometricSpace5D<T>
Namespace: GeometricAlgebraFulcrumLib.Modeling.Geometry.CGa
Beschreibung: 5D Conformal GA fĂŒr 3D-Geometrie
Konstruktion:
// FĂŒr Float64 (empfohlen)
var cga = CGaFloat64GeometricSpace5D.Instance;
// FĂŒr generische Typen
var cga = CGaGeometricSpace5D<T>.Create(scalarProcessor);
Encoding:
// IPNS Round Objects (Inner Product Null Space)
var point = cga.Encode.IpnsRound.Point(x, y, z);
var sphere = cga.Encode.IpnsRound.RealSphere(radius, cx, cy, cz);
var pointPair = cga.Encode.IpnsRound.PointPair(p1, p2);
var circle = cga.Encode.IpnsRound.Circle(center, radius, bivector);
// OPNS Flat Objects (Outer Product Null Space)
var line = cga.Encode.OpnsFlat.Line(point, direction);
var plane = cga.Encode.OpnsFlat.Plane(point, bivector);
var flatPoint = cga.Encode.OpnsFlat.Point(x, y, z);
// IPNS Flat Objects
var ipnsLine = cga.Encode.IpnsFlat.Line(point, direction);
var ipnsPlane = cga.Encode.IpnsFlat.Plane(point, normal);
Decoding:
// Dekodiere IPNS Round
var decoded = blade.DecodeIpnsRound.Element();
// Extrahiere Komponenten
var center = decoded.CenterToVector3D();
var radius = decoded.RealRadius;
var direction = decoded.DirectionToVector3D();
var normal = decoded.NormalDirectionToVector3D();
var bivector = decoded.DirectionToBivector3D();
// Dekodiere OPNS Flat
var decodedFlat = blade.DecodeOpnsFlat.Element();
var point = decodedFlat.PositionToVector3D();
var direction = decodedFlat.DirectionToVector3D();
Transformationen:
// Translation
var translator = cga.CreateTranslator(translationVector);
var translated = translator.OmMap(object);
// Rotation
var rotor = cga.CreateRotor(bivector, angle);
var rotated = rotor.OmMap(object);
// Dilation (Skalierung)
var dilator = cga.CreateDilator(scale);
var scaled = dilator.OmMap(object);
// Inversion
var inverter = cga.CreateInverter(sphere);
var inverted = inverter.OmMap(object);
// Kombinierte Transformation
var combined = translator.Gp(rotor).Gp(dilator);
var transformed = combined.OmMap(object);
Geometrische Operationen:
// Schnitt
var intersection = object1.Op(object2);
// Projektion
var projected = object1.ProjectOn(object2);
// Spiegelung
var reflected = object.ReflectOn(plane);
// Dualisierung
var dual = object.Dual();
Metaprogrammierung
MetaContext
Namespace: GeometricAlgebraFulcrumLib.MetaProgramming.Context
Beschreibung: Kontext fĂŒr Code-Generierung
Verwendung:
// 1. Kontext erstellen
var context = new MetaContext();
// 2. Parameter definieren
var x = context.CreateParameter("x");
var y = context.CreateParameter("y");
// 3. Konstanten
var pi = context.CreateConstant("pi", Math.PI);
// 4. Berechnungen
var scalarProcessor = context.ScalarProcessor;
var processor = XGaProcessor<IMetaExpression>.CreateEuclidean(scalarProcessor);
var v = processor.CreateComposer()
.SetVectorTerm(0, x)
.SetVectorTerm(1, y)
.SetVectorTerm(2, 0)
.GetVector();
var result = v.NormSquared();
// 5. Output definieren
context.SetOutputVariable("result", result);
// 6. Optimieren
context.OptimizeContext();
// 7. Code generieren
var codeComposer = new CSharpCodeComposer();
var code = codeComposer.GenerateCode(context);
Optimierungen:
// Konstanten-Propagation
context.EnableConstantPropagation();
// Common Subexpression Elimination
context.EnableCommonSubexpressionElimination();
// Symbolische Vereinfachung (benötigt CAS)
context.EnableSymbolicSimplification();
// Genetische Programmierung
context.EnableGeneticOptimization(
populationSize: 100,
generations: 50
);
// Alle Optimierungen
context.OptimizeContext();
IMetaExpression
Namespace: GeometricAlgebraFulcrumLib.MetaProgramming.Expressions
Beschreibung: Interface fĂŒr Meta-Expressions
Hierarchie:
IMetaExpression
âââ IMetaExpressionAtomic
â âââ MetaExpressionNumber // Konstante
â âââ MetaExpressionVariable // Variable/Parameter
âââ IMetaExpressionComposite
âââ MetaExpressionNegative // -a
âââ MetaExpressionAdd // a + b
âââ MetaExpressionSubtract // a - b
âââ MetaExpressionTimes // a * b
âââ MetaExpressionDivide // a / b
âââ MetaExpressionPower // a^b
âââ MetaExpressionFunction // sin(a), cos(a), etc.
Code-Composer
Namespace: GeometricAlgebraFulcrumLib.MetaProgramming.Composers
VerfĂŒgbare Composer:
// C#
var csharpComposer = new CSharpCodeComposer();
// C++
var cppComposer = new CppCodeComposer();
// JavaScript
var jsComposer = new JavaScriptCodeComposer();
// Python
var pythonComposer = new PythonCodeComposer();
// MATLAB
var matlabComposer = new MatlabCodeComposer();
Konfiguration:
composer.SetMethodName("ComputeResult");
composer.SetClassName("MyClass");
composer.SetNamespace("MyNamespace");
composer.SetIndentation(" "); // 4 Spaces
composer.SetLineEnding("\n");
var code = composer.GenerateCode(context);
Utilities
Linear Algebra Utilities
Namespace: GeometricAlgebraFulcrumLib.Algebra.LinearAlgebra
Vektoren (Float64):
using GeometricAlgebraFulcrumLib.Algebra.LinearAlgebra.Float64.Vectors.Space2D;
using GeometricAlgebraFulcrumLib.Algebra.LinearAlgebra.Float64.Vectors.Space3D;
using GeometricAlgebraFulcrumLib.Algebra.LinearAlgebra.Float64.Vectors.Space4D;
// 2D Vektor
var v2d = LinFloat64Vector2D.Create(x, y);
// 3D Vektor
var v3d = LinFloat64Vector3D.Create(x, y, z);
// 4D Vektor
var v4d = LinFloat64Vector4D.Create(x, y, z, w);
// n-D Vektor (generisch Float64)
var vnd = Float64Vector.Create(component1, component2, component3, ...);
Vektoren (Generisch):
// FĂŒr nicht-Float64 Typen (Rational, Symbolic, etc.)
var v2d = scalarProcessor.CreateVector2D(x, y);
var v3d = scalarProcessor.CreateVector3D(x, y, z);
var v4d = scalarProcessor.CreateVector4D(x, y, z, w);
Matrizen:
// Matrix erstellen
var matrix = scalarProcessor.CreateMatrix(rows, columns);
// Matrix-Operationen
var product = matrix1.Multiply(matrix2);
var transpose = matrix.Transpose();
var inverse = matrix.Inverse();
var determinant = matrix.Determinant();
Text Utilities
Namespace: GeometricAlgebraFulcrumLib.Utilities.Text
Linear Text Composer:
var composer = new LinearTextComposer();
composer.AppendLine("Hello");
composer.AppendLine("World");
composer.AppendAtNewLine("New line");
var text = composer.ToString();
Parametric Text Composer:
var template = "Hello #name#, you are #age# years old.";
var composer = new ParametricTextComposer("#", "#", template);
composer["name"] = "Alice";
composer["age"] = "30";
var result = composer.GenerateText();
// "Hello Alice, you are 30 years old."
Zusammenfassung
Diese API-Referenz bietet eine Ăbersicht ĂŒber die wichtigsten Klassen und Methoden. FĂŒr:
- VollstÀndige API-Details: Siehe IntelliSense und XML-Kommentare im Code
- Verwendungsbeispiele: Siehe examples.md
- Architektur: Siehe architecture.md
- Getting Started: Siehe getting-started.md