Correction --- translation is parabolic, so X(t) = (1 - t L) X (1 + t L) . [The expression I wrote down was appropriate to a hyperbolic "boost", in general relativity jargon. Rotations and their Moebius analogues would of course substitute cos, sin for cosh, sinh resp.] WFL On 5/5/11, Fred lunnon <fred.lunnon@gmail.com> wrote:
Does geometric algebra give a nicer description?
Well, it is certainly much easier to calculate the motion once you are inside the algebra: you can write down elements X, etc representing points of your asteroid, and L representing your translation axis; then the moving points are just X(t) = (cosh t - L sinh t) X (cosh t + L sinh t), etc.
On the other hand, you need an implementation of the Clifford algebra Cl(3,1,0) in your chosen language. It's not hard to cobble up a primitive system from scratch from the definitions, based on anticommutative generators x^2 = y^2 = 1 = u^2 = -v^2 ; however an efficient implementation requires delving into the matrix representation (in this case real 4x4).
There are also (freely downloadable) systems available for general signature: Gaigen (Python) and BIGEBRA (Maple) come to mind, though I lack personal experience of using either; also introductory "viewer" packages, about which I'd be intrigued to hear of any user experiences. More about these at http://en.wikipedia.org/wiki/Geometric_algebra
And of course, your I/O still involves mapping between algebra and Euclidean (Poincare) plane.
As it happens, until a week or so ago when I started thinking about the Apollonian gasket again, I'd never had occasion to use this particular algebra. I do possess (quite) efficient implementations of Cl(3,2,0) in Maple and Java for contact (Lie-sphere) plane geometry, which would be usable for conformal (Moebius), at the cost of a touch of overkill. Which also goes for 3-space Cl(4,1,0), available in various forms under the acronym CGA.
In my opinion, if you are looking for a rope up the learning curve into this area, a project like this is as good an excuse as any. However if you just want to get code on file, and have no plans (for example) to bolt on sophisticated dynamics, then you're probably better off sticking with whatever you've already got.
Hope this helps. Fred Lunnon
On 5/4/11, Mike Stay <metaweta@gmail.com> wrote:
I'm contemplating writing a version of asteroids on Klein's quartic---a three-holed torus constructed by identifying certain edges of 24 hyperbolic heptahedrons---rather than the usual one-holed torus we get by identifying opposite edges of a square. I've chosen to use Poincare's disk for my model of hyperbolic space, so the path an undisturbed asteroid takes on the screen will be an arc that meets the disk at right angles.
I've worked through the algebra for calculating the next position of a particle moving at a constant velocity per timestep, but it's pretty ugly: given a particle's position and velocity vectors, I solve a quadratic to find the center of the circular arc defining the geodesic, then another to find the endpoints where it intersects the unit disc, then a mobius transformation to map the geodesic to the imaginary axis, then a mobius transformation to move it forward along the geodesic according to its velocity, then inverting everything to get back to the original point of view.
Does geometric algebra give a nicer description? -- Mike Stay - metaweta@gmail.com http://www.cs.auckland.ac.nz/~mike http://reperiendi.wordpress.com
On Wed, May 4, 2011 at 2:44 PM, Mike Stay <metaweta@gmail.com> wrote:
of 24 hyperbolic heptahedrons
Sorry, I meant hyperbolic regular heptagons.