chore(users): grfn -> aspen
Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
parent
0ba476a426
commit
82ecd61f5c
478 changed files with 75 additions and 77 deletions
71
users/aspen/xanthous/src/Xanthous/Physics.hs
Normal file
71
users/aspen/xanthous/src/Xanthous/Physics.hs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
--------------------------------------------------------------------------------
|
||||
module Xanthous.Physics
|
||||
( throwDistance
|
||||
, bluntThrowDamage
|
||||
) where
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Prelude
|
||||
import Xanthous.Data
|
||||
( Meters
|
||||
, (:**:)(..)
|
||||
, Square
|
||||
, Grams
|
||||
, (|*|)
|
||||
, (|/|)
|
||||
, Hitpoints
|
||||
, Per (..)
|
||||
, squared
|
||||
, Uno(..), (|+|)
|
||||
)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- university shotputter can put a 16 lb shot about 14 meters
|
||||
-- ≈ 7.25 kg 14 meters
|
||||
-- 14m = x / (7.25kg × y + z)²
|
||||
-- 14m = x / (7250g × y + z)²
|
||||
--
|
||||
-- we don't want to scale down too much:
|
||||
--
|
||||
-- 10 kg 10 meters
|
||||
-- = 10000 g 10 meters
|
||||
--
|
||||
-- 15 kg w meters
|
||||
-- = 15000 g w meters
|
||||
--
|
||||
-- 14m = x / (7250g × y + z)²
|
||||
-- 10m = x / (10000g × y + z)²
|
||||
-- wm = x / (15000g × y + z)²
|
||||
--
|
||||
-- w≈0.527301 ∧ y≈0.000212178 sqrt(x) ∧ z≈1.80555 sqrt(x) ∧ 22824.1 sqrt(x)!=0
|
||||
--
|
||||
-- x = 101500
|
||||
-- y = 0.0675979
|
||||
-- z = 575.231
|
||||
--
|
||||
|
||||
-- TODO make this dynamic
|
||||
strength :: Meters :**: Square Grams
|
||||
strength = Times 10150000
|
||||
|
||||
yCoeff :: Uno Double
|
||||
yCoeff = Uno 0.0675979
|
||||
|
||||
zCoeff :: Uno Double
|
||||
zCoeff = Uno 575.231
|
||||
|
||||
-- | Calculate the maximum distance an object with the given weight can be
|
||||
-- thrown
|
||||
throwDistance
|
||||
:: Grams -- ^ Weight of the object
|
||||
-> Meters -- ^ Max distance thrown
|
||||
throwDistance weight = strength |/| squared (weight |*| yCoeff |+| zCoeff)
|
||||
|
||||
-- | Returns the damage dealt by a blunt object with the given weight when
|
||||
-- thrown
|
||||
bluntThrowDamage
|
||||
:: Grams
|
||||
-> Hitpoints
|
||||
bluntThrowDamage weight = throwDamageRatio |*| weight
|
||||
where
|
||||
throwDamageRatio :: Hitpoints `Per` Grams
|
||||
throwDamageRatio = Rate $ 1 / 5000
|
||||
Loading…
Add table
Add a link
Reference in a new issue