POV-Ray : Newsgroups : povray.off-topic : Liquid Physics : Re: Physics Code Server Time
1 Oct 2024 15:19:02 EDT (-0400)
  Re: Physics Code  
From: Invisible
Date: 2 Apr 2008 07:30:41
Message: <47f37c71$1@news.povray.org>
You know what? Screw it. Let's start again...

data State = State {velocity, position :: !Double}

data Derivative = Derivative {dvelocity, dposition :: !Double}

evaluate :: State -> Double -> Double -> Maybe Derivative -> Derivative
evaluate s t dt Nothing = Derivative {dvelocity = acceleration s t, 
dposition = velocity s}
evaluate s t dt (Just d) =
   let
     s' = State {velocity = velocity s + dvelocity d * dt, position = 
position s + dposition d * dt}
   in  Derivative {dvelocity = acceleration s' (t+dt), dposition = 
velocity s'}

integrate :: State -> Double -> Double -> State
integrate s t dt =
   let
     a = evaluate s t dt     Nothing
     b = evaluate s t (dt/2) (Just a)
     c = evaluate s t (dt/2) (Just b)
     d = evaluate s t dt     (Just c)
     dv = (dvelocity a + 2 * (dvelocity b + dvelocity c) + dvelocity d) / 6
     dp = (dposition a + 2 * (dposition b + dposition c) + dposition d) / 6
   in  State {velocity = velocity s + dv * dt, position = position s + 
dp * dt}

acceleration :: State -> Double -> Double
acceleration = error "not implemented yet"

Does that look correct?

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.