| Copyright | (C) Frank Staals |
|---|---|
| License | see the LICENSE file |
| Maintainer | Frank Staals |
| Safe Haskell | None |
| Language | GHC2024 |
HGeometry.Vector
Description
D-dimensional Vectors
Synopsis
- data family Vector (d :: Nat) r
- class HasComponents vector vector' where
- components :: IndexedTraversal1 Int vector vector' (IxValue vector) (IxValue vector')
- module HGeometry.Vector.Class
- isScalarMultipleOf :: forall r vector (d :: Nat). (Eq r, Num r, Metric_ vector d r) => vector -> vector -> Bool
- scalarMultiple :: forall r vector (d :: Nat). (Eq r, Fractional r, Additive_ vector d r) => vector -> vector -> Maybe r
- sameDirection :: forall vector (d :: Nat) r. (Additive_ vector d r, Num r, Eq r) => vector -> vector -> Bool
- cross :: Num r => Vector 3 r -> Vector 3 r -> Vector 3 r
Documentation
data family Vector (d :: Nat) r Source #
Data type representing d-dimensional vectors storing elements of type r.
Instances
class HasComponents vector vector' where Source #
Types that have a components indexed traversal
Methods
components :: IndexedTraversal1 Int vector vector' (IxValue vector) (IxValue vector') Source #
An Indexed Traversal over the components of a vector
>>>myVec3 ^.. components[1,2,3]>>>myVec3 ^@.. components[(0,1),(1,2),(2,3)]
Instances
| HasComponents (V1 r) (V1 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (V2 r) (V2 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (V3 r) (V3 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (V4 r) (V4 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (Vector 1 r) (Vector 1 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (Vector 2 r) (Vector 2 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (Vector 3 r) (Vector 3 s) Source # | |
Defined in HGeometry.Vector.Type | |
| HasComponents (Vector 4 r) (Vector 4 s) Source # | |
Defined in HGeometry.Vector.Type | |
module HGeometry.Vector.Class
isScalarMultipleOf :: forall r vector (d :: Nat). (Eq r, Num r, Metric_ vector d r) => vector -> vector -> Bool Source #
'isScalarmultipleof u v' test if v is a scalar multiple of u.
>>>Vector2 1 1 `isScalarMultipleOf` Vector2 10 10True>>>Vector3 1 1 2 `isScalarMultipleOf` Vector3 10 10 20True>>>Vector2 1 1 `isScalarMultipleOf` Vector2 10 1False>>>Vector2 1 1 `isScalarMultipleOf` Vector2 (-1) (-1)True>>>Vector2 1 1 `isScalarMultipleOf` Vector2 11.1 11.1True>>>Vector2 1 1 `isScalarMultipleOf` Vector2 11.1 11.2False>>>Vector2 2 1 `isScalarMultipleOf` Vector2 11.1 11.2False>>>Vector2 2 1 `isScalarMultipleOf` Vector2 4 2True>>>Vector2 2 1 `isScalarMultipleOf` Vector2 4 0False>>>Vector3 2 1 0 `isScalarMultipleOf` Vector3 4 0 5False>>>Vector3 0 0 0 `isScalarMultipleOf` Vector3 4 0 5True
scalarMultiple :: forall r vector (d :: Nat). (Eq r, Fractional r, Additive_ vector d r) => vector -> vector -> Maybe r Source #
scalarMultiple u v computes the scalar labmda s.t. v = lambda * u (if it exists)
sameDirection :: forall vector (d :: Nat) r. (Additive_ vector d r, Num r, Eq r) => vector -> vector -> Bool Source #
Given two colinar vectors, u and v, test if they point in the same direction, i.e. iff scalarMultiple' u v == Just lambda, with lambda > 0
pre: u and v are colinear, u and v are non-zero
Special vector operations
Orphan instances
| (Vector Vector r, Vector_ (Vector d r) d r) => Vector Vector (Vector d r) Source # | |
Methods basicUnsafeFreeze :: Mutable Vector s (Vector d r) -> ST s (Vector (Vector d r)) Source # basicUnsafeThaw :: Vector (Vector d r) -> ST s (Mutable Vector s (Vector d r)) Source # basicLength :: Vector (Vector d r) -> Int Source # basicUnsafeSlice :: Int -> Int -> Vector (Vector d r) -> Vector (Vector d r) Source # basicUnsafeIndexM :: Vector (Vector d r) -> Int -> Box (Vector d r) Source # basicUnsafeCopy :: Mutable Vector s (Vector d r) -> Vector (Vector d r) -> ST s () Source # elemseq :: Vector (Vector d r) -> Vector d r -> b -> b Source # | |
| (MVector MVector r, Vector_ (Vector d r) d r) => MVector MVector (Vector d r) Source # | |
Methods basicLength :: MVector s (Vector d r) -> Int Source # basicUnsafeSlice :: Int -> Int -> MVector s (Vector d r) -> MVector s (Vector d r) Source # basicOverlaps :: MVector s (Vector d r) -> MVector s (Vector d r) -> Bool Source # basicUnsafeNew :: Int -> ST s (MVector s (Vector d r)) Source # basicInitialize :: MVector s (Vector d r) -> ST s () Source # basicUnsafeReplicate :: Int -> Vector d r -> ST s (MVector s (Vector d r)) Source # basicUnsafeRead :: MVector s (Vector d r) -> Int -> ST s (Vector d r) Source # basicUnsafeWrite :: MVector s (Vector d r) -> Int -> Vector d r -> ST s () Source # basicClear :: MVector s (Vector d r) -> ST s () Source # basicSet :: MVector s (Vector d r) -> Vector d r -> ST s () Source # basicUnsafeCopy :: MVector s (Vector d r) -> MVector s (Vector d r) -> ST s () Source # basicUnsafeMove :: MVector s (Vector d r) -> MVector s (Vector d r) -> ST s () Source # basicUnsafeGrow :: MVector s (Vector d r) -> Int -> ST s (MVector s (Vector d r)) Source # | |
| (Unbox r, Vector_ (Vector d r) d r) => Unbox (Vector d r) Source # | |