mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-14 09:32:22 +00:00
82 lines
6.8 KiB
HTML
82 lines
6.8 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<style type="text/css">
|
|
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
|
|
span.nottickedoff { background: yellow}
|
|
span.istickedoff { background: white }
|
|
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
|
|
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
|
|
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
|
|
span.decl { font-weight: bold }
|
|
span.spaces { background: white }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre>
|
|
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
|
|
</pre>
|
|
<pre>
|
|
<span class="lineno"> 1 </span>module Reanimate.Morph.Linear
|
|
<span class="lineno"> 2 </span> ( linear, rawLinear
|
|
<span class="lineno"> 3 </span> , linearCorrespondence
|
|
<span class="lineno"> 4 </span> , closestLinearCorrespondence
|
|
<span class="lineno"> 5 </span> , closestLinearCorrespondenceA
|
|
<span class="lineno"> 6 </span> , linearTrajectory
|
|
<span class="lineno"> 7 </span> ) where
|
|
<span class="lineno"> 8 </span>
|
|
<span class="lineno"> 9 </span>import Data.Hashable
|
|
<span class="lineno"> 10 </span>import qualified Data.Vector as V
|
|
<span class="lineno"> 11 </span>import Linear.Vector
|
|
<span class="lineno"> 12 </span>import Reanimate.ColorComponents
|
|
<span class="lineno"> 13 </span>import Reanimate.Math.Common
|
|
<span class="lineno"> 14 </span>import Reanimate.Math.Polygon
|
|
<span class="lineno"> 15 </span>import Reanimate.Morph.Cache
|
|
<span class="lineno"> 16 </span>import Reanimate.Morph.Common
|
|
<span class="lineno"> 17 </span>
|
|
<span class="lineno"> 18 </span>linear :: Morph
|
|
<span class="lineno"> 19 </span><span class="decl"><span class="nottickedoff">linear = rawLinear</span>
|
|
<span class="lineno"> 20 </span><span class="spaces"> </span><span class="nottickedoff">{ morphPointCorrespondence =</span>
|
|
<span class="lineno"> 21 </span><span class="spaces"> </span><span class="nottickedoff">cachePointCorrespondence (hash ("closest"::String))</span>
|
|
<span class="lineno"> 22 </span><span class="spaces"> </span><span class="nottickedoff">closestLinearCorrespondence }</span></span>
|
|
<span class="lineno"> 23 </span>
|
|
<span class="lineno"> 24 </span>rawLinear :: Morph
|
|
<span class="lineno"> 25 </span><span class="decl"><span class="istickedoff">rawLinear = Morph</span>
|
|
<span class="lineno"> 26 </span><span class="spaces"> </span><span class="istickedoff">{ morphTolerance = 0.001</span>
|
|
<span class="lineno"> 27 </span><span class="spaces"> </span><span class="istickedoff">, morphColorComponents = <span class="nottickedoff">labComponents</span></span>
|
|
<span class="lineno"> 28 </span><span class="spaces"> </span><span class="istickedoff">, morphPointCorrespondence = linearCorrespondence</span>
|
|
<span class="lineno"> 29 </span><span class="spaces"> </span><span class="istickedoff">, morphTrajectory = linearTrajectory</span>
|
|
<span class="lineno"> 30 </span><span class="spaces"> </span><span class="istickedoff">, morphObjectCorrespondence = splitObjectCorrespondence }</span></span>
|
|
<span class="lineno"> 31 </span>
|
|
<span class="lineno"> 32 </span>linearCorrespondence :: PointCorrespondence
|
|
<span class="lineno"> 33 </span><span class="decl"><span class="istickedoff">linearCorrespondence = normalizePolygons</span></span>
|
|
<span class="lineno"> 34 </span>
|
|
<span class="lineno"> 35 </span>closestLinearCorrespondence :: PointCorrespondence
|
|
<span class="lineno"> 36 </span><span class="decl"><span class="nottickedoff">closestLinearCorrespondence = closestLinearCorrespondenceA</span></span>
|
|
<span class="lineno"> 37 </span>
|
|
<span class="lineno"> 38 </span>closestLinearCorrespondenceA :: (Real a, Fractional a) => APolygon a -> APolygon a -> (APolygon a, APolygon a)
|
|
<span class="lineno"> 39 </span><span class="decl"><span class="nottickedoff">closestLinearCorrespondenceA src' dst' =</span>
|
|
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">(src, worker dst (score dst) options)</span>
|
|
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">(src, dst) = normalizePolygons src' dst'</span>
|
|
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP _bestPScore [] = bestP</span>
|
|
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP bestPScore (x:xs) =</span>
|
|
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">let newScore = score x in</span>
|
|
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">if newScore < bestPScore</span>
|
|
<span class="lineno"> 47 </span><span class="spaces"> </span><span class="nottickedoff">then worker x newScore xs</span>
|
|
<span class="lineno"> 48 </span><span class="spaces"> </span><span class="nottickedoff">else worker bestP bestPScore xs</span>
|
|
<span class="lineno"> 49 </span><span class="spaces"> </span><span class="nottickedoff">options = pCycles dst</span>
|
|
<span class="lineno"> 50 </span><span class="spaces"> </span><span class="nottickedoff">score p = sum</span>
|
|
<span class="lineno"> 51 </span><span class="spaces"> </span><span class="nottickedoff">[ -- approxDist (pAccess src n) (pAccess p n)</span>
|
|
<span class="lineno"> 52 </span><span class="spaces"> </span><span class="nottickedoff">distSquared (pAccess src n) (pAccess p n)</span>
|
|
<span class="lineno"> 53 </span><span class="spaces"> </span><span class="nottickedoff">| n <- [0 .. pSize src-1] ]</span></span>
|
|
<span class="lineno"> 54 </span>
|
|
<span class="lineno"> 55 </span>linearTrajectory :: Trajectory
|
|
<span class="lineno"> 56 </span><span class="decl"><span class="istickedoff">linearTrajectory (src,dst)</span>
|
|
<span class="lineno"> 57 </span><span class="spaces"> </span><span class="istickedoff">| <span class="tickonlytrue">pSize src == pSize dst</span> = \t -> mkPolygon $</span>
|
|
<span class="lineno"> 58 </span><span class="spaces"> </span><span class="istickedoff">V.zipWith (lerp $ realToFrac t) (polygonPoints dst) (polygonPoints src)</span>
|
|
<span class="lineno"> 59 </span><span class="spaces"> </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span> = <span class="nottickedoff">error $ "Invalid lengths: " ++ show (pSize src, pSize dst)</span></span></span>
|
|
|
|
</pre>
|
|
</body>
|
|
</html>
|