mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
76 lines
2.3 KiB
Text
76 lines
2.3 KiB
Text
import Semantics.PhysicsEuclidean
|
|
|
|
namespace Semantics.PhysicsLagrangian
|
|
|
|
open Semantics.PhysicsScalar
|
|
open Semantics.PhysicsEuclidean
|
|
|
|
abbrev Q16_16 := PhysicsScalar.Q16_16
|
|
|
|
structure PhysicsLagrangian (n : Nat) where
|
|
position : PhysicsEuclidean.PhysicsEuclidean n
|
|
velocity : PhysicsEuclidean.PhysicsEuclidean n
|
|
momentum : PhysicsEuclidean.PhysicsEuclidean n
|
|
massScale : Q16_16
|
|
actionDensity : Q16_16
|
|
|
|
namespace PhysicsLagrangian
|
|
|
|
def zero (n : Nat) : PhysicsLagrangian n :=
|
|
{ position := PhysicsEuclidean.zero n
|
|
, velocity := PhysicsEuclidean.zero n
|
|
, momentum := PhysicsEuclidean.zero n
|
|
, massScale := Q16_16.one
|
|
, actionDensity := Q16_16.zero }
|
|
|
|
instance {n : Nat} : Inhabited (PhysicsLagrangian n) where
|
|
default := zero n
|
|
|
|
|
|
def kineticProxy (state : PhysicsLagrangian n) : Q16_16 :=
|
|
let momentumEnergy := PhysicsEuclidean.dot state.velocity state.momentum
|
|
Q16_16.mul Q16_16.half momentumEnergy
|
|
|
|
|
|
def transportWeight (state : PhysicsLagrangian n) : Q16_16 :=
|
|
Q16_16.add state.massScale state.actionDensity
|
|
|
|
|
|
def advanceLinear (delta : Q16_16) (state : PhysicsLagrangian n) : PhysicsLagrangian n :=
|
|
let displacement := PhysicsEuclidean.scale delta state.velocity
|
|
{ state with position := PhysicsEuclidean.add state.position displacement }
|
|
|
|
|
|
def updateMomentum
|
|
(coupling : Q16_16)
|
|
(state : PhysicsLagrangian n) : PhysicsLagrangian n :=
|
|
let shiftedMomentum := PhysicsEuclidean.scale coupling state.velocity
|
|
{ state with momentum := PhysicsEuclidean.add state.momentum shiftedMomentum }
|
|
|
|
|
|
def applyImpulse
|
|
(impulse : PhysicsEuclidean.PhysicsEuclidean n)
|
|
(state : PhysicsLagrangian n) : PhysicsLagrangian n :=
|
|
{ state with momentum := PhysicsEuclidean.add state.momentum impulse }
|
|
|
|
|
|
def dampVelocity
|
|
(retention : Q16_16)
|
|
(state : PhysicsLagrangian n) : PhysicsLagrangian n :=
|
|
{ state with velocity := PhysicsEuclidean.scale retention state.velocity }
|
|
|
|
|
|
def withActionDensity (actionDensity : Q16_16) (state : PhysicsLagrangian n) : PhysicsLagrangian n :=
|
|
{ state with actionDensity := actionDensity }
|
|
|
|
|
|
def effectiveEnergy (state : PhysicsLagrangian n) : Q16_16 :=
|
|
Q16_16.add (kineticProxy state) state.actionDensity
|
|
|
|
end PhysicsLagrangian
|
|
|
|
abbrev BodyState2D := PhysicsLagrangian 2
|
|
abbrev BodyState3D := PhysicsLagrangian 3
|
|
abbrev BodyState4D := PhysicsLagrangian 4
|
|
|
|
end Semantics.PhysicsLagrangian
|