Plane
group plane
In projective geometry, planes are the fundamental element through which all other entities are constructed. Lines are the meet of two planes, and points are the meet of three planes (equivalently, a line and a plane).
The plane multivector in PGA looks like \(d\mathbf{e}_0 + a\mathbf{e}_1 + b\mathbf{e}_2 + c\mathbf{e}_3\). Points that reside on the plane satisfy the familiar equation \(d + ax + by + cz = 0\).
Summary
Members | Descriptions |
---|---|
public plane () = default |
|
public plane (__m128 xmm) noexcept |
|
public plane (float a,float b,float c,float d) noexcept |
The constructor performs the rearrangement so the plane can be specified in the familiar form: ax + by + cz + d |
public explicit plane (float * data) noexcept |
Data should point to four floats with memory layout (d, a, b, c) where d occupies the lowest address in memory. |
public void load (float * data) noexcept |
Unaligned load of data. The data argument should point to 4 floats corresponding to the (d, a, b, c) components of the plane multivector where d occupies the lowest address in memory. |
public void normalize () noexcept |
Normalize this plane \(p\) such that \(p \cdot p = 1\). |
public plane normalized () const noexcept |
Return a normalized copy of this plane. |
public float norm () const noexcept |
Compute the plane norm, which is often used to compute distances between points and lines. |
public void invert () noexcept |
|
public plane inverse () const noexcept |
|
public bool KLN_VEC_CALL operator== (plane other) const noexcept |
|
public bool KLN_VEC_CALL approx_eq (plane other,float epsilon) const noexcept |
|
public plane KLN_VEC_CALL operator() (plane const & p) const noexcept |
Reflect another plane \(p_2\) through this plane \(p_1\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p_1 p_2 p_1\). |
public line KLN_VEC_CALL operator() (line const & l) const noexcept |
Reflect line \(\ell\) through this plane \(p\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p \ell p\). |
public point KLN_VEC_CALL operator() (point const & p) const noexcept |
Reflect the point \(P\) through this plane \(p\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p P p\). |
public plane &KLN_VEC_CALL operator+= (plane b) noexcept |
Plane addition. |
public plane &KLN_VEC_CALL operator-= (plane b) noexcept |
Plane subtraction. |
public plane & operator*= (float s) noexcept |
Plane uniform scale. |
public plane & operator*= (int s) noexcept |
Plane uniform scale. |
public plane & operator/= (float s) noexcept |
Plane uniform inverse scale. |
public plane & operator/= (int s) noexcept |
Plane uniform inverse scale. |
public float x () const noexcept |
|
public float e1 () const noexcept |
|
public float y () const noexcept |
|
public float e2 () const noexcept |
|
public float z () const noexcept |
|
public float e3 () const noexcept |
|
public float d () const noexcept |
|
public float e0 () const noexcept |
|
public plane KLN_VEC_CALL operator+ (plane a,plane b) noexcept |
Plane addition. |
public plane KLN_VEC_CALL operator- (plane a,plane b) noexcept |
Plane subtraction. |
public plane KLN_VEC_CALL operator* (plane p,float s) noexcept |
Plane uniform scale. |
public plane KLN_VEC_CALL operator* (float s,plane p) noexcept |
Plane uniform scale. |
public plane KLN_VEC_CALL operator* (plane p,int s) noexcept |
Plane uniform scale. |
public plane KLN_VEC_CALL operator* (int s,plane p) noexcept |
Plane uniform scale. |
public plane KLN_VEC_CALL operator/ (plane p,float s) noexcept |
Plane uniform inverse scale. |
public plane KLN_VEC_CALL operator/ (plane p,int s) noexcept |
Plane uniform inverse scale. |
public plane KLN_VEC_CALL operator- (plane p) noexcept |
Unary minus (leaves displacement from origin untouched, changing orientation only) |
Members
plane() = default
plane(__m128 xmm) noexcept
plane(float a,float b,float c,float d) noexcept
The constructor performs the rearrangement so the plane can be specified in the familiar form: ax + by + cz + d
explicit plane(float * data) noexcept
Data should point to four floats with memory layout (d, a, b, c)
where d
occupies the lowest address in memory.
void load(float * data) noexcept
Unaligned load of data. The data
argument should point to 4 floats corresponding to the (d, a, b, c)
components of the plane multivector where d
occupies the lowest address in memory.
Tip
This is a faster mechanism for setting data compared to setting components one at a time.
void normalize() noexcept
Normalize this plane \(p\) such that \(p \cdot p = 1\).
In order to compute the cosine of the angle between planes via the inner product operator |
, the planes must be normalized. Producing a normalized rotor between two planes with the geometric product *
also requires that the planes are normalized.
plane normalized() const noexcept
Return a normalized copy of this plane.
float norm() const noexcept
Compute the plane norm, which is often used to compute distances between points and lines.
Given a normalized point \(P\) and normalized line \(\ell\), the plane \(P\vee\ell\) containing both \(\ell\) and \(P\) will have a norm equivalent to the distance between \(P\) and \(\ell\).
void invert() noexcept
plane inverse() const noexcept
bool KLN_VEC_CALL operator==(plane other) const noexcept
bool KLN_VEC_CALL approx_eq(plane other,float epsilon) const noexcept
plane KLN_VEC_CALL operator()(plane const & p) const noexcept
Reflect another plane \(p_2\) through this plane \(p_1\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p_1 p_2 p_1\).
line KLN_VEC_CALL operator()(line const & l) const noexcept
Reflect line \(\ell\) through this plane \(p\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p \ell p\).
point KLN_VEC_CALL operator()(point const & p) const noexcept
Reflect the point \(P\) through this plane \(p\). The operation performed via this call operator is an optimized routine equivalent to the expression \(p P p\).
plane &KLN_VEC_CALL operator+=(plane b) noexcept
Plane addition.
plane &KLN_VEC_CALL operator-=(plane b) noexcept
Plane subtraction.
plane & operator*=(float s) noexcept
Plane uniform scale.
plane & operator*=(int s) noexcept
Plane uniform scale.
plane & operator/=(float s) noexcept
Plane uniform inverse scale.
plane & operator/=(int s) noexcept
Plane uniform inverse scale.
float x() const noexcept
float e1() const noexcept
float y() const noexcept
float e2() const noexcept
float z() const noexcept
float e3() const noexcept
float d() const noexcept
float e0() const noexcept
plane KLN_VEC_CALL operator+(plane a,plane b) noexcept
Plane addition.
plane KLN_VEC_CALL operator-(plane a,plane b) noexcept
Plane subtraction.
plane KLN_VEC_CALL operator*(plane p,float s) noexcept
Plane uniform scale.
plane KLN_VEC_CALL operator*(float s,plane p) noexcept
Plane uniform scale.
plane KLN_VEC_CALL operator*(plane p,int s) noexcept
Plane uniform scale.
plane KLN_VEC_CALL operator*(int s,plane p) noexcept
Plane uniform scale.
plane KLN_VEC_CALL operator/(plane p,float s) noexcept
Plane uniform inverse scale.
plane KLN_VEC_CALL operator/(plane p,int s) noexcept
Plane uniform inverse scale.
plane KLN_VEC_CALL operator-(plane p) noexcept
Unary minus (leaves displacement from origin untouched, changing orientation only)