A technique for the Minkowski representation of hyperbolic geometry, including the hyperbolic linear interpolation or hlerp.
There are three widely-used geometries with a constant Riemannian curvature tensor: Euclidean, spherical, and hyperbolic. Of the three, hyperbolic is the most fun. It’s big (area increases exponentially with distance), looks small (binocular parallax says everything is close at hand), and it doesn’t admit a simple orientation field like the axes of Euclidean geometry or the poles of spherical geometry.
The nicest mathematical representation for hyperbolic points and planes is a homogeneous vector: (x, y, z, w) in 3D for example, where by definition multiplying the vector by a scalar doesn’t change it. I like to write that as (x, w), where x is a normal vector and w is the scalar homogeneous part.
The hyperbolic dot or inner product, (x, a)·(y, b), is defined as ab – x·y. A normalized homogeneous vector v has the characteristic that the vector’s squared magnitude or self-dot, v·v, is ±1. A vector can be normalized by dividing it by the square root of the absolute value of its self-dot. Vectors for which the self-dot is positive are called points; those for which it is negative are called planes. The notion of a Euclidean vector—that is, a direction and magnitude independent of location—has no obvious parallel in non-Euclidean geometry.
In the Minkowski geometry we’ll make liberal use of hyperbolic trigonomtry functions:
|ex – e–x|
|ex + e–x|
Unless otherwise specified, I assume all vectors are normalized.
The distance between two points is acosh(p·q). The distance between a point and a plane is asinh(p·q). The angle between two planes is acos(p·q) if that is defined (i.e., |p·q| ≤ 1); otherwise the planes do not intersect. For two points, p + q is their midpoint and p – q is the plane dividing them
The hyperbolic linear interpolation gives points along the line defined by two points. It is a direct parallel to the spherical linear interpolation, or slerp, used in spherical geometry. Given d = acosh(p·q) and s = 1 – t, we can find a normalized point hlerp(p, t, q) as (sinh(sd)p + sinh(td)q) ÷ sinh(d).
I’ll talk about affine transformations and the experiential quality of hyperbolic geometries in a later post.