Add quaternions to body positions

This commit is contained in:
2025-08-09 10:07:55 +01:00
parent 1063a2314d
commit 7f9d837bf0
+49 -20
View File
@@ -160,27 +160,53 @@ translateToLeftWrist cr = overPosSP
-- f i = negate 2 + negate 6 * (sLen - i) / sLen -- f i = negate 2 + negate 6 * (sLen - i) / sLen
-- g i = negate 2 + negate 6 * (i) / sLen -- g i = negate 2 + negate 6 * (i) / sLen
translateToLeftLeg :: Creature -> SPic -> SPic leftLegPQ :: Creature -> Point3Q
translateToLeftLeg cr = leftLegPQ cr = Q.comp (0,Q.qz (_crMvDir cr - _crDir cr))
rotateSP (_crMvDir cr - _crDir cr) . case cr ^? crStance . carriage of (V3 x off 0,Q.qID)
Just (Walking sa LeftForward) -> translateSPxy (f sa) off
Just (Walking sa RightForward) -> translateSPxy (- f sa) off
_ -> translateSPxy 0 off
where where
x = case cr ^? crStance . carriage of
Just (Walking sa LeftForward) -> f sa
Just (Walking sa RightForward) -> - f sa
_ -> 0
off = 5 off = 5
sLen = _strideLength $ _crStance cr sLen = _strideLength $ _crStance cr
f i = 8 * (sLen - i) / sLen f i = 8 * (sLen - i) / sLen
translateToLeftLeg :: Creature -> SPic -> SPic
translateToLeftLeg cr = overPosSP (\p -> fst (leftLegPQ cr `Q.comp` (p,Q.qID)))
-- rotateSP (_crMvDir cr - _crDir cr) . case cr ^? crStance . carriage of
-- Just (Walking sa LeftForward) -> translateSPxy (f sa) off
-- Just (Walking sa RightForward) -> translateSPxy (- f sa) off
-- _ -> translateSPxy 0 off
-- where
-- off = 5
-- sLen = _strideLength $ _crStance cr
-- f i = 8 * (sLen - i) / sLen
rightLegPQ :: Creature -> Point3Q
rightLegPQ cr = Q.comp (0,Q.qz (_crMvDir cr - _crDir cr))
(V3 x off 0,Q.qID)
where
x = case cr ^? crStance . carriage of
Just (Walking sa LeftForward) -> -f sa
Just (Walking sa RightForward) -> f sa
_ -> 0
off = -5
sLen = _strideLength $ _crStance cr
f i = 8 * (sLen - i) / sLen
translateToRightLeg :: Creature -> SPic -> SPic translateToRightLeg :: Creature -> SPic -> SPic
translateToRightLeg cr = translateToRightLeg cr = overPosSP (\p -> fst (rightLegPQ cr `Q.comp` (p,Q.qID)))
rotateSP (_crMvDir cr - _crDir cr) . case cr ^? crStance . carriage of --translateToRightLeg cr =
Just (Walking sa LeftForward) -> translateSPxy (- f sa) (- off) -- rotateSP (_crMvDir cr - _crDir cr) . case cr ^? crStance . carriage of
Just (Walking sa RightForward) -> translateSPxy (f sa) (- off) -- Just (Walking sa LeftForward) -> translateSPxy (- f sa) (- off)
_ -> translateSPxy 0 (- off) -- Just (Walking sa RightForward) -> translateSPxy (f sa) (- off)
where -- _ -> translateSPxy 0 (- off)
off = 5 -- where
sLen = _strideLength $ _crStance cr -- off = 5
f i = 8 * (sLen - i) / sLen -- sLen = _strideLength $ _crStance cr
-- f i = 8 * (sLen - i) / sLen
translateToHead :: Creature -> SPic -> SPic translateToHead :: Creature -> SPic -> SPic
translateToHead cr = overPosSP (\p -> fst $ (headPQ cr `Q.comp` (p,Q.qID))) translateToHead cr = overPosSP (\p -> fst $ (headPQ cr `Q.comp` (p,Q.qID)))
@@ -208,12 +234,15 @@ translatePointToHead cr p = fst (headPQ cr `Q.comp` (p,Q.qID))
-- . rotate3 (negate 0.5) -- . rotate3 (negate 0.5)
-- | otherwise = (+.+.+ V3 2.5 0 20) -- | otherwise = (+.+.+ V3 2.5 0 20)
chestPQ :: Creature -> Point3Q
chestPQ cr = backPQ cr `Q.comp` (0,Q.qz pi)
translateToChest :: Creature -> SPic -> SPic translateToChest :: Creature -> SPic -> SPic
translateToChest cr translateToChest cr = overPosSP (\p -> fst $ chestPQ cr `Q.comp` (p,Q.qID))
| oneH cr = rotateSP 0.5 -- | oneH cr = rotateSP 0.5
-- | twists cr = translateSPxy 0 5 . rotateSP (-1) -- -- | twists cr = translateSPxy 0 5 . rotateSP (-1)
| twists cr = rotateSP (-1) -- | twists cr = rotateSP (-1)
| otherwise = id -- | otherwise = id
backPQ :: Creature -> Point3Q backPQ :: Creature -> Point3Q
backPQ cr backPQ cr