Squared distance of point, line or plane to origin in GA

Old-school way

It's not hard to find the distance of a point p (represented as a position vector p) from the origin : simply compute norm(p).

Neither is it hard to find the distance of a plane P (represented in [N : -d] form) from the origin: it's simply d.

However, according to the information at this link, the process of finding the distance of a line represented homogeneously (in Plücker coordinates) from the origin is more involved.

For a line represented as {U : V}, (with U the line's 3-d direction vector and V the line's 3-d moment vector), its squared distance from the origin is

V , V⟩ / ⟨U , U

so the distance of a Plücker line to the origin is the square root of that.

 

  • These techniques offer no consistent methodology for determining the minimum distance of a geometric entity to the origin. We have one way of dealing with points, another way of dealing with planes, and yet another way of dealing with lines.

 

New-school way

Fortunately, GA provides a consistent framework for finding the (squared) distance of a k-flat X to the origin. Define

dX, O2 = || supp(X) || 2 , where supp(X) ∈ R N returns the support vector of X .

Recall that

  • eN + 1-1e N + 1 ≡ [0 : 1] , i.e., the origin of PN + 1

  • dir(X) = (e N + 1-1X) , giving the direction of k-flat X .

Define

  • moment(X) as eN + 1 -1 ⌋ (e N + 1X) , giving the moment of k-flat X .

  • supp(X) is defined as moment(X) / dir(X), with / denoting geometric division if dir(X) is not scalar.

Compare this with the method given further above for the finding squared distance of Plücker line to origin.

 

Summary:

  • the squared distance of a k-flat to the origin is equal to the square of its support vector.

 

 

Jason Wood
3-d software engineer and humanist. Programming Languages: * 15+ years C/C++ coding experience. * Some experience with Java and D. * Experienced with Second Life scripting (LSL). * Exposure to Lua. Skills: * Extremely knowledgeable about rendering technologies / engines (15+ years experience). * Strong skills with topics in Linear & Geometric Algebra, game physics, collision detection, Machine Learning. * Some experience with Blender and GIMP. Platforms: * Daily use of MSVC and git. * Some Linux experience. Work experience: * GameFusion, Paris, France (2009- present) * Oddworld, SLO, CA (2001) * Wild Tangent, Redmond, WA (2000-01) * Eclipse Entertainment, Austin, TX (1998-99) * Titanic Entertainment, Austin, TX (1998)
Previous
Previous

Introducing the GameFusion 3D LevelEditor

Next
Next

Using GA for intersection testing