Safe Haskell | None |
---|---|
Language | Haskell2010 |
Arithmetic utility functions for vectors and matrices.
- data V2 = V2 Double# Double#
- toListV2 :: V2 -> [Double]
- fromListV2 :: [Double] -> V2
- dotV2 :: V2 -> V2 -> Double#
- lift2V2 :: (Double# -> Double# -> Double#) -> V2 -> V2 -> V2
- liftV2 :: (Double# -> Double#) -> V2 -> V2
- data V3 = V3 Double# Double# Double#
- toListV3 :: V3 -> [Double]
- fromListV3 :: [Double] -> V3
- dotV3 :: V3 -> V3 -> Double#
- lift2V3 :: (Double# -> Double# -> Double#) -> V3 -> V3 -> V3
- liftV3 :: (Double# -> Double#) -> V3 -> V3
- data V6 = V6 Double# Double# Double# Double# Double# Double#
- toListV6 :: V6 -> [Double]
- fromListV6 :: [Double] -> V6
- dotV6 :: V6 -> V6 -> Double#
- lift2V6 :: (Double# -> Double# -> Double#) -> V6 -> V6 -> V6
- liftV6 :: (Double# -> Double#) -> V6 -> V6
- data M2x2 = M2x2 Double# Double# Double# Double#
- mulT2x2 :: V2 -> V2 -> M2x2
- mul2x2d :: M2x2 -> V2 -> M2x2
- muld2x2 :: V2 -> M2x2 -> M2x2
- mulr2x2 :: V2 -> M2x2 -> V2
- mul2x2c :: M2x2 -> V2 -> V2
- toListM2x2 :: M2x2 -> [Double]
- fromListM2x2 :: [Double] -> M2x2
- lift2M2x2 :: (Double# -> Double# -> Double#) -> M2x2 -> M2x2 -> M2x2
- liftM2x2 :: (Double# -> Double#) -> M2x2 -> M2x2
- data M3x3 = M3x3 Double# Double# Double# Double# Double# Double# Double# Double# Double#
- mulT3x3 :: V3 -> V3 -> M3x3
- mul3x3d :: M3x3 -> V3 -> M3x3
- muld3x3 :: V3 -> M3x3 -> M3x3
- mulr3x3 :: V3 -> M3x3 -> V3
- mul3x3c :: M3x3 -> V3 -> V3
- toListM3x3 :: M3x3 -> [Double]
- fromListM3x3 :: [Double] -> M3x3
- lift2M3x3 :: (Double# -> Double# -> Double#) -> M3x3 -> M3x3 -> M3x3
- liftM3x3 :: (Double# -> Double#) -> M3x3 -> M3x3
- data M6x6 = M6x6 Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double# Double#
- mulT6x6 :: V6 -> V6 -> M6x6
- mul6x6d :: M6x6 -> V6 -> M6x6
- muld6x6 :: V6 -> M6x6 -> M6x6
- mulr6x6 :: V6 -> M6x6 -> V6
- mul6x6c :: M6x6 -> V6 -> V6
- toListM6x6 :: M6x6 -> [Double]
- fromListM6x6 :: [Double] -> M6x6
- lift2M6x6 :: (Double# -> Double# -> Double#) -> M6x6 -> M6x6 -> M6x6
- liftM6x6 :: (Double# -> Double#) -> M6x6 -> M6x6
- mul2x2x2 :: M2x2 -> M2x2 -> M2x2
- mul3x3x3 :: M3x3 -> M3x3 -> M3x3
- split3v3 :: V6 -> (V3, V3)
- join3v3 :: V3 -> V3 -> V6
- newtype Diag6 = Diag6 V6
- newtype P2 = P2 V2
- append2 :: V2 -> Double -> V3
- split3 :: V3 -> (V2, Double)
- smulV2 :: Double -> V2 -> V2
- smulV2' :: V2 -> Double -> V2
- sdivV2 :: Double -> V2 -> V2
- smulV6 :: Double -> V6 -> V6
- smulV6' :: V6 -> Double -> V6
- smulM2x2 :: Double -> M2x2 -> M2x2
- smulM2x2' :: M2x2 -> Double -> M2x2
- plusV2 :: V2 -> V2 -> V2
- plusV6 :: V6 -> V6 -> V6
- zeroV2 :: V2
- zeroP2 :: P2
- minusV2 :: V2 -> V2 -> V2
- crossV2 :: V2 -> V2 -> Double
- crosszV2 :: V2 -> Double -> V2
- zcrossV2 :: Double -> V2 -> V2
- unitV2 :: Double -> V2
- crossV2V2 :: V2 -> V2 -> V2 -> V2
- vmulDiag6 :: V6 -> Diag6 -> V6
- vmulDiag6' :: Diag6 -> V6 -> V6
- flip3v3 :: V6 -> V6
- afdot :: P2 -> V2 -> Double
- afdot' :: V2 -> P2 -> Double
- clockwiseV2 :: V2 -> V2
- normalizeV2 :: V2 -> V2
- lengthV2 :: V2 -> Double
- sqLengthV2 :: V2 -> Double
- diffP2 :: P2 -> P2 -> V2
- midpointP2 :: P2 -> P2 -> P2
- vplusP2 :: V2 -> P2 -> P2
- pminusV2 :: P2 -> V2 -> P2
- pplusV2 :: P2 -> V2 -> P2
- invM2x2 :: M2x2 -> M2x2
- negateV2 :: V2 -> V2
- identity2x2 :: M2x2
- identity3x3 :: M3x3
- afmul :: M3x3 -> V2 -> V2
- afmul' :: M3x3 -> P2 -> P2
- data Line2 = Line2 {
- linePoint :: !P2
- lineNormal :: !V2
- toLine2 :: P2 -> P2 -> Line2
- perpLine2 :: P2 -> P2 -> Line2
- intersect2 :: Line2 -> Line2 -> P2
- data ClipResult a
- applyClip :: ClipResult a -> SP a a -> Either a (SP a a)
- applyClip' :: ClipResult a -> SP a a -> Maybe (SP a a)
- applyClip'' :: ClipResult a -> SP s s -> Maybe (Either s (SP s s))
- lApplyClip :: ASetter' s a -> ClipResult a -> SP s s -> Either s (SP s s)
- lApplyClip' :: ASetter' s a -> ClipResult a -> SP s s -> Maybe (SP s s)
- clipSegment :: Line2 -> SP Line2 (SP P2 P2) -> ClipResult P2
- rotate22_ :: Double# -> Double# -> M2x2
- rotate22 :: Double# -> M2x2
- afmat33 :: M2x2 -> M3x3
- aftranslate33 :: V2 -> M3x3
- afrotate33 :: Double# -> M3x3
- afscale33 :: V2 -> M3x3
Documentation
fromListV2 :: [Double] -> V2 Source #
fromListV3 :: [Double] -> V3 Source #
fromListV6 :: [Double] -> V6 Source #
toListM2x2 :: M2x2 -> [Double] Source #
fromListM2x2 :: [Double] -> M2x2 Source #
toListM3x3 :: M3x3 -> [Double] Source #
fromListM3x3 :: [Double] -> M3x3 Source #
toListM6x6 :: M6x6 -> [Double] Source #
fromListM6x6 :: [Double] -> M6x6 Source #
clockwiseV2 :: V2 -> V2 Source #
normalizeV2 :: V2 -> V2 Source #
sqLengthV2 :: V2 -> Double Source #
Squared length of a vector.
identity2x2 :: M2x2 Source #
identity3x3 :: M3x3 Source #
data ClipResult a Source #
applyClip :: ClipResult a -> SP a a -> Either a (SP a a) Source #
Apply a ClipResult
to a line segment. Replaces clipped endpoints.
If both endpoints (entire segment) clipped, use Left
ed clip point.
TODO: Delete this function?
applyClip' :: ClipResult a -> SP a a -> Maybe (SP a a) Source #
applyClip'' :: ClipResult a -> SP s s -> Maybe (Either s (SP s s)) Source #
Alternate form of applyClip
. Removes clipped points.
:: ASetter' s a | lens to access the "point" data to apply the clipping |
-> ClipResult a | clipping |
-> SP s s | line segment with endpoints that contain "point" data |
-> Either s (SP s s) |
lApplyClip' :: ASetter' s a -> ClipResult a -> SP s s -> Maybe (SP s s) Source #
Alternate form of lApplyClip
. If the entire segment was behind the bound, use Nothing
.
:: Line2 | bounding plane |
-> SP Line2 (SP P2 P2) | (plane of the line segment, endpoints of the line segment) |
-> ClipResult P2 | which endpoint(s) to clip, and what point to clip to |
Given a bounding plane (expressed as a point and a normal), figure out how to clip a line segment so it is on the positive side of the plane.
aftranslate33 :: V2 -> M3x3 Source #
afrotate33 :: Double# -> M3x3 Source #