Shifting an affine subspace towards a point #
This file introduces a "shift" transformation of affine subspace, where the subspace is translated
relatively to a point c. This is equivalent to AffineSubspace.map (AffineEquiv.constVAdd ..),
but hides the detail of arbitrarily choosing a point in the subspace.
Shifting is controlled by a parameter r, indicating how far the output space is to c. We set
r = 0 to mean the output space passes through c (See AffineSubspace.shift_zero),
while r = 1 means not moving the input space at all (See AffineSubspace.shift_one).
With this convention, this transformation is also equivalent to AffineSubspace.map (homothety c r)
when r is a unit.
Main declarations #
AffineSubspace.shiftdefines the shift transformation.AffineSubspace.shift_eqshows the shift transformation is equivalent to translation.AffineSubspace.shift_eq_map_homothetyshows the shift transformation is equivalent to homothety.
AffineSubspace.shift s c r is an affine subspace parallel to s, where an arbitrary point on
s is moved towards c with linear interpolation by r. When r = 0, that point is moved onto
c. When r = 1, that point stays at the original position. A different choice of the point will
not affect the output (See AffineSubspace.shift_eq).
We define AffineSubspace.shift ⊥ c r = ⊥ (See AffineSubspace.shift_bot).
Equations
- s.shift c r = if h : Nonempty ↥s then AffineSubspace.map (↑(AffineEquiv.constVAdd k P ((1 - r) • (c -ᵥ ↑h.some)))) s else ⊥
Instances For
AffineSubspace.shift s c r can be represented by moving a point in the subspace
towards c.
For a unit parameter, shifting is the same as mapping by homothety.