| Copyright | (c) 2011 diagrams-lib team (see LICENSE) |
|---|---|
| License | BSD-style (see LICENSE) |
| Maintainer | diagrams-discuss@googlegroups.com |
| Safe Haskell | None |
| Language | Haskell2010 |
Diagrams.ThreeD.Types
Description
Basic types for three-dimensional Euclidean space.
- data R3
- r3 :: (Double, Double, Double) -> R3
- unr3 :: R3 -> (Double, Double, Double)
- mkR3 :: Double -> Double -> Double -> R3
- type P3 = Point R3
- p3 :: (Double, Double, Double) -> P3
- unp3 :: P3 -> (Double, Double, Double)
- mkP3 :: Double -> Double -> Double -> P3
- type T3 = Transformation R3
- r3Iso :: Iso' R3 (Double, Double, Double)
- p3Iso :: Iso' P3 (Double, Double, Double)
- data Angle
- rad :: Iso' Angle Double
- turn :: Iso' Angle Double
- deg :: Iso' Angle Double
- (@@) :: b -> Iso' a b -> a
- fullTurn :: Angle
- angleRatio :: Angle -> Angle -> Double
- class Direction d where
- toSpherical :: d -> Spherical
- fromSpherical :: Spherical -> d
- data Spherical = Spherical Angle Angle
- asSpherical :: Spherical -> Spherical
3D Euclidean space
The three-dimensional Euclidean vector space R^3.
Instances
| Eq R3 | |
| Ord R3 | |
| Read R3 | |
| Show R3 | |
| Transformable R3 | |
| Wrapped R3 | Lens wrapped isomorphisms for R3. |
| HasCross3 R3 | |
| HasBasis R3 | |
| VectorSpace R3 | |
| InnerSpace R3 | |
| AdditiveGroup R3 | |
| HasZ P3 | |
| HasZ R3 | |
| HasY P3 | |
| HasY R3 | |
| HasX P3 | |
| HasX R3 | |
| Coordinates R3 | |
| Rewrapped R3 R3 | |
| type V R3 = R3 | |
| type Unwrapped R3 = (Double, Double, Double) | |
| type Basis R3 = Either () (Either () ()) | |
| type Scalar R3 = Double | |
| type FinalCoord R3 = Double | |
| type PrevDim R3 = R2 | |
| type Decomposition R3 = (:&) ((:&) Double Double) Double |
type T3 = Transformation R3 Source
Transformations in R^3.
Two-dimensional angles
These are defined in Diagrams.TwoD.Types but reëxported here for convenience.
Angles can be expressed in a variety of units. Internally, they are represented in radians.
rad :: Iso' Angle Double Source
The radian measure of an Angle a can be accessed as a
^. rad. A new Angle can be defined in radians as pi @@ rad.
turn :: Iso' Angle Double Source
The measure of an Angle a in full circles can be accessed as
a ^. turn. A new Angle of one-half circle can be defined in as
1/2 @@ turn.
deg :: Iso' Angle Double Source
The degree measure of an Angle a can be accessed as a
^. deg. A new Angle can be defined in degrees as 180 @@
deg.
(@@) :: b -> Iso' a b -> a infixl 5 Source
30 @@ deg is an Angle of the given measure and units.
More generally, @@ reverses the Iso' on its right, and
applies the Iso' to the value on the left. Angles are the
motivating example where this order improves readability.
angleRatio :: Angle -> Angle -> Double Source
Calculate ratio between two angles.
Directions in 3D
class Direction d where Source
Direction is a type class representing directions in R3. The interface is based on that of the Angle class in 2D.
Methods
toSpherical :: d -> Spherical Source
Convert to spherical coördinates
fromSpherical :: Spherical -> d Source
Convert from spherical coördinates
A direction expressed as a pair of spherical coordinates.
`Spherical 0 0` is the direction of unitX. The first coordinate
represents rotation about the Z axis, the second rotation towards the Z axis.
asSpherical :: Spherical -> Spherical Source
The identity function with a restricted type, for conveniently
restricting unwanted polymorphism. For example, fromDirection
. asSpherical . camForward gives a unit vector pointing in the
direction of the camera view. Without asSpherical, the
intermediate type would be ambiguous.