| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Physics.Constraint
Description
Types for describing the motion of physical objects. Functions for solving constraints.
- data InvMass2 = InvMass2 {}
 - data PhysicalObj = PhysicalObj {
- _physObjVel :: !V2
 - _physObjRotVel :: !Double
 - _physObjPos :: !V2
 - _physObjRotPos :: !Double
 - _physObjInvMass :: !InvMass2
 
 - physObjVel :: Lens' PhysicalObj V2
 - physObjRotVel :: Lens' PhysicalObj Double
 - physObjRotPos :: Lens' PhysicalObj Double
 - physObjPos :: Lens' PhysicalObj V2
 - physObjInvMass :: Lens' PhysicalObj InvMass2
 - _physObjVel3 :: PhysicalObj -> V3
 - physObjVel3 :: Functor f => (V3 -> f V3) -> PhysicalObj -> f PhysicalObj
 - toInvMass2 :: (Double, Double) -> InvMass2
 - data Constraint = Constraint {
- _constraintJ :: !V6
 - _constraintB :: !Double
 
 - type Constraint' p = (p, p) -> Constraint
 - type PhysObjChanged = PhysicalObj -> PhysicalObj -> Bool
 - _constrainedVel6 :: (PhysicalObj, PhysicalObj) -> V6
 - constrainedVel6 :: Functor f => (V6 -> f V6) -> (PhysicalObj, PhysicalObj) -> f (PhysicalObj, PhysicalObj)
 - invMassM2 :: InvMass2 -> InvMass2 -> Diag6
 - isStatic :: InvMass2 -> Bool
 - isStaticLin :: InvMass2 -> Bool
 - isStaticRot :: InvMass2 -> Bool
 - _constrainedInvMassM2 :: (PhysicalObj, PhysicalObj) -> Diag6
 - _physObjTransform :: PhysicalObj -> WorldTransform
 - velocity2 :: PhysicalObj -> PhysicalObj -> V6
 - lagrangian2 :: (PhysicalObj, PhysicalObj) -> Constraint -> Lagrangian
 - effMassM2 :: V6 -> PhysicalObj -> PhysicalObj -> Double
 - constraintImpulse2 :: V6 -> Lagrangian -> V6
 - updateVelocity2_ :: V6 -> Diag6 -> V6 -> V6
 - applyLagrangian2 :: Diag6 -> V6 -> Lagrangian -> (PhysicalObj, PhysicalObj) -> (PhysicalObj, PhysicalObj)
 - solveConstraint :: Constraint -> (PhysicalObj, PhysicalObj) -> (PhysicalObj, PhysicalObj)
 - applyLagrangian :: Lagrangian -> Constraint -> (PhysicalObj, PhysicalObj) -> (PhysicalObj, PhysicalObj)
 - advanceObj :: PhysicalObj -> Double -> PhysicalObj
 - module Physics.Constraint.Types
 
Documentation
Multiplicative inverse of linear and rotational mass
data PhysicalObj Source #
The state of motion for a physical body. Rotation is measured in the Z direction (right-handed coordinates).
Constructors
| PhysicalObj | |
Fields 
  | |
Instances
_physObjVel3 :: PhysicalObj -> V3 Source #
physObjVel3 :: Functor f => (V3 -> f V3) -> PhysicalObj -> f PhysicalObj Source #
Lens for 3D velocity vector: (v_x, v_y, v_rot)
toInvMass2 :: (Double, Double) -> InvMass2 Source #
Convert (linear mass, rotational inertia) into InvMass2.
 Use 0 for infinite mass (non-translating/non-rotating objects).
data Constraint Source #
A constraint equation between two objects to be solved using the objects' state of motion
Constructors
| Constraint | |
Fields 
  | |
Instances
type Constraint' p = (p, p) -> Constraint Source #
Generates a constraint equation from a pair of objects
type PhysObjChanged = PhysicalObj -> PhysicalObj -> Bool Source #
Are these two different motion states? Used to determine whether the constraint solver has converged.
_constrainedVel6 :: (PhysicalObj, PhysicalObj) -> V6 Source #
Get a 6D velocity vector for a pair of objects. (a_vx, a_vy, a_vr, b_vx, b_vy, b_vr)
Called "constrained" because it's used with objects constrained together.
constrainedVel6 :: Functor f => (V6 -> f V6) -> (PhysicalObj, PhysicalObj) -> f (PhysicalObj, PhysicalObj) Source #
Lens for 6D velocity vector (_constrainedVel6)
invMassM2 :: InvMass2 -> InvMass2 -> Diag6 Source #
6x6 diagonal matrix of inverse mass
invMassM2 (InvMass2 ma ia) (InvMass2 mb ib) = Diag6 (V6 ma ma ia mb mb ib)
isStaticLin :: InvMass2 -> Bool Source #
Is this object non-translating (no center-of-mass movement)?
isStaticRot :: InvMass2 -> Bool Source #
Is this object non-rotating?
_constrainedInvMassM2 :: (PhysicalObj, PhysicalObj) -> Diag6 Source #
see invMassM2
_physObjTransform :: PhysicalObj -> WorldTransform Source #
Get WorldTransform from origin to the current position
 (translation & rotation) of an object.
velocity2 :: PhysicalObj -> PhysicalObj -> V6 Source #
Get a 6D velocity vector for a pair of objects.
 Same as _constrainedVel6
lagrangian2 :: (PhysicalObj, PhysicalObj) -> Constraint -> Lagrangian Source #
Use objects' current state of motion to solve their constraint equation.
The Lagrangian multiplier is the (signed) magnitude
 of the constraint impulse along the constraint axis.
Arguments
| :: V6 | Jacobian  | 
| -> PhysicalObj | |
| -> PhysicalObj | |
| -> Double | Inverse of effective mass  | 
The inverse effective mass of a pair of objects along the constraint axis
Arguments
| :: V6 | Jacobian  | 
| -> Lagrangian | |
| -> V6 | 6D constraint impulse vector  | 
Get the impulse that solves a constraint equation.
Arguments
| :: V6 | 6D velocity for two objects  | 
| -> Diag6 | Inverse mass for two objects  | 
| -> V6 | 6D constraint impulse  | 
| -> V6 | New 6D velocity  | 
Apply a constraint impulse to two objects.
Arguments
| :: Diag6 | Inverse mass  | 
| -> V6 | Jacobian  | 
| -> Lagrangian | |
| -> (PhysicalObj, PhysicalObj) | |
| -> (PhysicalObj, PhysicalObj) | 
Use a Lagrangian multiplier to update a pair of objects.
Arguments
| :: Constraint | Constraint equation  | 
| -> (PhysicalObj, PhysicalObj) | |
| -> (PhysicalObj, PhysicalObj) | Updated state of motion  | 
Solve a constraint between two objects.
Arguments
| :: Lagrangian | Lagrangian multiplier from solving the constraint  | 
| -> Constraint | The constraint equation  | 
| -> (PhysicalObj, PhysicalObj) | |
| -> (PhysicalObj, PhysicalObj) | Updated state of motion  | 
Use a Lagrangian multiplier to update a pair of objects.
advanceObj :: PhysicalObj -> Double -> PhysicalObj Source #
Advance the position (translation & rotation) of an object by applying its velocity over a time delta.
module Physics.Constraint.Types