rsagl-math-0.6.0.0: The RogueStar Animation and Graphics Library: Mathematics

RSAGL.Math.Affine

Description

Affine Transformations of Arbitrary Geometric Objects

Synopsis

# Documentation

class AffineTransformable a whereSource

`AffineTransformable` objects are subject to affine transformations using matrix multiplication.

Methods

transform :: Matrix -> a -> aSource

Apply an affine transformation, defined by a 4x4 matrix. (This is the only required method.)

scale :: Vector3D -> a -> aSource

Scale an entity along the `x` `y` and `z` axes. For example, `scale (Vector3D 2 3 4)` will make an object twice as wide, three times as tall, and four times as deep. It may be helpful to think of the vector as a control point on the vertex of a unit cube.

translate :: Vector3D -> a -> aSource

Translate an entity along the specified vector.

rotate :: Vector3D -> Angle -> a -> aSource

Rotate an entity about the origin, using the specified vector as the axis of rotation. See also `transformAbout` to rotate around an arbitrary point.

rotateX :: Angle -> a -> aSource

Specific rotation around the x-axis.

rotateY :: Angle -> a -> aSource

Specific rotation around the y-axis.

rotateZ :: Angle -> a -> aSource

Specific rotation around the z-axis.

Instances

 AffineTransformable SurfaceVertex3D AffineTransformable Vector3D AffineTransformable Point3D AffineTransformable Matrix AffineTransformable BoundingBox AffineTransformable Ray3D AffineTransformable a => AffineTransformable [a] AffineTransformable (IO a) The IO monad itself is AffineTransformable. This is done by wrapping the IO action in an OpenGL transformation. AffineTransformable a => AffineTransformable (Maybe a) AffineTransformable a => AffineTransformable (Surface a) AffineTransformable a => AffineTransformable (Curve a) (AffineTransformable a, AffineTransformable b) => AffineTransformable (a, b) (AffineTransformable a, AffineTransformable b, AffineTransformable c) => AffineTransformable (a, b, c)

scale' :: AffineTransformable a => RSdouble -> a -> aSource

Specific scale preserving proportions.

inverseTransform :: AffineTransformable a => Matrix -> a -> aSource

Apply the inverse of an affine transformation, defined by a 4x4 matrix.

withTransformation :: AffineTransformable a => Matrix -> (a -> a) -> a -> aSource

Apply a function under an affine transformation. `withTransformation m id` is an identity if `m` is invertable.

transformAbout :: AffineTransformable a => Point3D -> (a -> a) -> a -> aSource

Apply a function treating a particular point as the origin. For example, combining `transformAbout` with `rotate` performs a rotation about an arbitrary point rather than the origin.

translateToFrom :: AffineTransformable a => Point3D -> Point3D -> a -> aSource

Specific translation along the vector between two points. This ordinary use is to set the second point as the center of a model (typically origin_point_3d) and the first point as the desired position of the model.

rotateToFrom :: AffineTransformable a => Vector3D -> Vector3D -> a -> aSource

Specific rotation along the shortest path that brings the second vector in line with the first.

scaleAlong :: AffineTransformable a => Vector3D -> RSdouble -> a -> aSource

Specific scale along an arbitary axis.