module RSAGL.Animation.KinematicSensors
(odometer,
inertia)
where
import Control.Arrow
import RSAGL.Math.Vector
import RSAGL.FRP
import RSAGL.Scene.CoordinateSystems
import RSAGL.Math
odometer :: (CoordinateSystemClass s,StateOf m ~ s) => CoordinateSystem -> Vector3D -> FRP e m () RSdouble
odometer cs measurement_vector_ =
arr (const origin_point_3d) >>> exportToA cs >>> derivative >>> importFromA cs >>>
arr (withTime (fromSeconds 1) (dotProduct measurement_vector)) >>>
integral 0
where measurement_vector = vectorNormalize measurement_vector_
inertia :: (CoordinateSystemClass s,StateOf m ~ s) =>
CoordinateSystem -> Point3D -> FRP e m () (Acceleration Vector3D)
inertia cs p = proc () -> arr (scalarMultiply (1)) <<< derivative <<< derivative <<< exportToA cs -< p