bivector-forum
Curated knowledge from the Geometric Algebra community
Version: 1.0.0
Trit: 0 (ERGODIC - knowledge transport)
Overview
bivector.net is the primary community hub for Geometric Algebra practitioners. This skill distills key insights, common pitfalls, and best practices.
Community Resources
| Resource | URL | Description | |----------|-----|-------------| | Forum | bivector.net | Discourse-based Q&A | | Discord | discord.gg/bivector | Real-time chat | | Wiki | bivector.net/wiki | Collaborative docs | | GAlculator | enkimute.github.io/ganja.js/examples/galculator.html | Online calculator |
Key Contributors
- Steven De Keninck (@enkimute) - ganja.js author
- Leo Dorst - "Geometric Algebra for Computer Science"
- Charles Gunn - PGA for graphics
- Eric Lengyel - Game engine applications
Common Patterns
1. Choosing the Right Algebra
| Use Case | Algebra | Signature | |----------|---------|-----------| | 2D graphics | PGA2D | Cl(2,0,1) | | 3D graphics | PGA3D | Cl(3,0,1) | | Circles/spheres | CGA | Cl(n+1,1) | | Rotations only | Quaternions | Cl(0,2) | | Rigid body | Dual Quaternions | Cl(0,2,1) | | Relativity | Spacetime | Cl(1,3) |
2. Dual vs Homogeneous
PGA (Projective): Points are bivectors, planes are vectors
- Pro: Unified treatment of points at infinity
- Con: Counterintuitive grading
CGA (Conformal): Points are null vectors
- Pro: Circles/spheres as blades
- Con: Higher dimensional, slower
3. Sign Conventions
Different sources use different conventions:
| Convention | e₀² | Point Encoding | |------------|-----|----------------| | "Mathematics" | 0 | e₁₂₃ + xe₀₂₃ + ye₀₁₃ + ze₀₁₂ | | "Engineering" | 0 | e₁₂₃ - xe₀₂₃ + ye₀₁₃ - ze₀₁₂ | | ganja.js | 0 | 1e123 - x1e023 + y1e013 - z*1e012 |
4. Normalization
Always normalize motors/rotors after composition:
// WRONG: Drift over time
for (let i = 0; i < 1000; i++) {
motor = motor.Mul(smallRotor); // Accumulates error
}
// RIGHT: Normalize periodically
for (let i = 0; i < 1000; i++) {
motor = motor.Mul(smallRotor);
if (i % 100 === 0) motor = motor.Normalized;
}
5. Avoiding Common Pitfalls
Pitfall: Wrong Product
// WRONG: Using geometric product for join
var line = pointA * pointB; // Gives rotor, not line!
// RIGHT: Use regressive product
var line = pointA & pointB; // Vee = join
Pitfall: Forgetting Reverse
// WRONG: Missing reverse in sandwich
var transformed = motor * point; // Only half the sandwich!
// RIGHT: Full sandwich
var transformed = motor * point * ~motor;
// Or use >>> operator
var transformed = motor >>> point;
Pitfall: Grade Extraction
// WRONG: Assuming grade by position
var scalar = result[0]; // May not be scalar!
// RIGHT: Use grade projection
var scalar = result.Grade(0);
var bivector = result.Grade(2);
Frequently Asked Questions
Q: PGA or CGA?
A: Start with PGA. It's simpler, faster, and covers most needs. Use CGA only when you need circles/spheres as first-class objects.
Q: Why are my transformations wrong?
A: Check:
- Motor normalization
- Sandwich product (both sides)
- Transformation order (right-to-left)
- Sign conventions
Q: How to debug multivector issues?
A:
- Use
console.log(mv.toString())in ganja.js - Check grade with
mv.Grade(k).Length - Verify normalization with
mv.Mul(mv.Reverse).s
Q: Performance tips?
A:
- Cache computed motors
- Use specialized rotors/translators
- Avoid repeated normalization
- Pre-compute inverse when possible
GAlculator Tips
The online GAlculator is great for:
- Quick experiments
- Verifying formulas
- Learning GA intuitively
// Example session
> 1e1 * 1e2
= 1e12
> (1e1 + 1e2).Normalized
= 0.707e1 + 0.707e2
> (1 + 0.5e12).Exp()
= 0.878 + 0.479e12
Integration with Skills Ecosystem
From bivector.net → Skills
| Forum Topic | Related Skill |
|-------------|---------------|
| "PGA for beginners" | ganja-wedge-game |
| "Motor interpolation" | pga-motor-interpolation |
| "CGA circles" | conformal-ga |
| "Visualization tips" | ga-visualization |
| "Code generation" | ga-codegen |
GF(3) Conservation
Community discussions often naturally balance:
- Questions (-1): Seeking understanding
- Answers (0): Sharing knowledge
- Examples (+1): Generating new applications
Discord Bot Commands
!algebra PGA3D - Show algebra info
!product a b - Compute geometric product
!explain wedge - Explain wedge product
!example rotation - Show rotation example
GF(3) Triads
bivector-forum (0) ⊗ ganja-wedge-game (+1) ⊗ conformal-ga (-1) = 0 ✓
bivector-forum (0) ⊗ ga-codegen (+1) ⊗ sheaf-cohomology (-1) = 0 ✓
Commands
# Open forum
open https://bivector.net/
# Open Discord
open https://discord.gg/vGY6pPk
# Open GAlculator
open https://enkimute.github.io/ganja.js/examples/galculator.html
References
Autopoietic Marginalia
The interaction IS the skill improving itself.
Every use of this skill is an opportunity for worlding:
- MEMORY (-1): Record what was learned
- REMEMBERING (0): Connect patterns to other skills
- WORLDING (+1): Evolve the skill based on use
Add Interaction Exemplars here as the skill is used.