Deploying to gh-pages from @ 0d4a5801de 🚀

This commit is contained in:
Lemmih 2020-08-07 07:52:54 +00:00
commit c0c7ac853d
11 changed files with 1168 additions and 1089 deletions

View file

@ -26,29 +26,21 @@
25% ( 1 / 4) in 'Reanimate.Builtin.Slide'
12% ( 2 / 17) in 'Reanimate.Math.SSSP'
10% ( 3 / 30) in 'Reanimate.PolyShape'
7% ( 2 / 29) in 'Reanimate.Math.Common'
6% ( 5 / 79) in 'Reanimate.Math.Polygon'
7% ( 2 / 30) in 'Reanimate.Math.Common'
6% ( 5 / 83) in 'Reanimate.Math.Polygon'
6% ( 1 / 18) in 'Reanimate.Svg.LineCommand'
0% ( 0 / 98) in 'Reanimate.Math.DCEL'
0% ( 0 / 37) in 'Reanimate.Internal.CubicBezier'
0% ( 0 / 20) in 'Reanimate.Math.Compatible'
0% ( 0 / 19) in 'Reanimate.Morph.Rigid'
0% ( 0 / 13) in 'Reanimate.Morph.LeastWork'
0% ( 0 / 13) in 'Reanimate.Morph.Common'
0% ( 0 / 10) in 'Reanimate.Math.Render'
0% ( 0 / 10) in 'Reanimate.ColorSpace'
0% ( 0 / 10) in 'Reanimate.Builtin.TernaryPlot'
0% ( 0 / 9) in 'Reanimate.Math.Smooth'
0% ( 0 / 8) in 'Reanimate.Misc'
0% ( 0 / 8) in 'Reanimate.Math.Balloon'
0% ( 0 / 8) in 'Reanimate.Chiphunk'
0% ( 0 / 7) in 'Reanimate.Morph.Linear'
0% ( 0 / 7) in 'Reanimate.Math.Visibility'
0% ( 0 / 6) in 'Reanimate.Morph.Linear'
0% ( 0 / 6) in 'Reanimate.Math.Triangulate'
0% ( 0 / 6) in 'Reanimate.Math.EarClip'
0% ( 0 / 5) in 'Reanimate.Builtin.Flip'
0% ( 0 / 4) in 'Reanimate.Debug'
0% ( 0 / 3) in 'Reanimate.Morph.Rotational'
0% ( 0 / 3) in 'Reanimate.Morph.LineBend'
0% ( 0 / 3) in 'Reanimate.Memo'
0% ( 0 / 2) in 'Reanimate.Morph.Cache'

View file

@ -1 +1 @@
{ "schemaVersion": 1, "label": "api docs", "message": "41%", "color": "success" }
{ "schemaVersion": 1, "label": "api docs", "message": "53%", "color": "success" }

View file

@ -1 +1 @@
{ "schemaVersion": 1, "label": "api tests", "message": "31%", "color": "success" }
{ "schemaVersion": 1, "label": "api tests", "message": "30%", "color": "success" }

View file

@ -25,9 +25,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Cache.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Cache</a></tt></td>
<td align="right">0%</td><td>0/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/160</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Chiphunk.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Chiphunk</a></tt></td>
<td align="right">57%</td><td>4/7</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>2/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">63%</td><td>121/192</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.ColorComponents.hs.html">reanimate-0.4.1.0-inplace/Reanimate.ColorComponents</a></tt></td>
<td align="right">75%</td><td>9/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">81%</td><td>135/166</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="81%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -68,13 +65,13 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">33%</td><td>4/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>1/9</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">7%</td><td>12/167</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="7%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Common.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Common</a></tt></td>
<td align="right">0%</td><td>0/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/370</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<td align="right">0%</td><td>0/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/413</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip</a></tt></td>
<td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/260</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">11%</td><td>9/78</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>55/2184</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.SSSP.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.SSSP</a></tt></td>
<td align="right">0%</td><td>0/16</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/43</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/854</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
@ -92,7 +89,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">33%</td><td>5/15</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>1/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>133/325</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear</a></tt></td>
<td align="right">60%</td><td>3/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">50%</td><td>3/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/84</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Parameters.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Parameters</a></tt></td>
<td align="right">15%</td><td>3/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">14%</td><td>7/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
@ -131,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">95%</td><td>43/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="95%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr></tr><tr style="background: #e0e0e0">
<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
<td align="right">31%</td><td>253/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>131/811</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>4760/15669</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4642/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
</table></body></html>

View file

@ -22,9 +22,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Animation.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Animation</a></tt></td>
<td align="right">87%</td><td>28/32</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="87%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>8/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">85%</td><td>298/347</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="85%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Chiphunk.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Chiphunk</a></tt></td>
<td align="right">57%</td><td>4/7</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>2/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">63%</td><td>121/192</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.ColorComponents.hs.html">reanimate-0.4.1.0-inplace/Reanimate.ColorComponents</a></tt></td>
<td align="right">75%</td><td>9/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">81%</td><td>135/166</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="81%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -50,7 +47,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">38%</td><td>5/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>15/80</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>323/777</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear</a></tt></td>
<td align="right">60%</td><td>3/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">50%</td><td>3/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/84</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox</a></tt></td>
<td align="right">40%</td><td>2/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>6/36</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>76/281</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
@ -61,12 +58,12 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Internal.CubicBezier.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Internal.CubicBezier</a></tt></td>
<td align="right">23%</td><td>20/86</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="23%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">7%</td><td>2/26</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="7%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>102/337</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Common.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Common</a></tt></td>
<td align="right">33%</td><td>5/15</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>1/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>133/325</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">11%</td><td>9/78</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>55/2184</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Driver.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Driver</a></tt></td>
<td align="right">8%</td><td>1/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">1%</td><td>1/55</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="1%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>9/246</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -86,7 +83,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">0%</td><td>0/16</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/30</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/634</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Common.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Common</a></tt></td>
<td align="right">0%</td><td>0/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/370</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<td align="right">0%</td><td>0/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/413</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip</a></tt></td>
<td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/260</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
@ -131,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">15%</td><td>3/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">14%</td><td>7/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr></tr><tr style="background: #e0e0e0">
<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
<td align="right">31%</td><td>253/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>131/811</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>4760/15669</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4642/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
</table></body></html>

View file

@ -31,9 +31,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.Constructors.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.Constructors</a></tt></td>
<td align="right">67%</td><td>33/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="67%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">37%</td><td>3/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="37%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">65%</td><td>369/565</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="65%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Chiphunk.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Chiphunk</a></tt></td>
<td align="right">57%</td><td>4/7</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>2/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">63%</td><td>121/192</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Effect.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Effect</a></tt></td>
<td align="right">52%</td><td>9/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="52%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">66%</td><td>4/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="66%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">51%</td><td>62/120</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="51%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -59,7 +56,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">23%</td><td>20/86</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="23%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">7%</td><td>2/26</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="7%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>102/337</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear</a></tt></td>
<td align="right">60%</td><td>3/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">50%</td><td>3/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/84</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox</a></tt></td>
<td align="right">40%</td><td>2/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>6/36</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>76/281</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
@ -95,7 +92,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">8%</td><td>1/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">1%</td><td>1/55</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="1%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>9/246</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">11%</td><td>9/78</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>55/2184</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Cache.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Cache</a></tt></td>
<td align="right">0%</td><td>0/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/160</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
@ -113,7 +110,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">0%</td><td>0/16</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/30</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/634</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Common.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Common</a></tt></td>
<td align="right">0%</td><td>0/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/370</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<td align="right">0%</td><td>0/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/413</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip</a></tt></td>
<td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/260</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
@ -131,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr></tr><tr style="background: #e0e0e0">
<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
<td align="right">31%</td><td>253/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>131/811</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>4760/15669</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4642/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
</table></body></html>

View file

@ -34,18 +34,15 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.Constructors.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.Constructors</a></tt></td>
<td align="right">67%</td><td>33/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="67%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">37%</td><td>3/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="37%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">65%</td><td>369/565</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="65%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear</a></tt></td>
<td align="right">60%</td><td>3/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Builtin.Images.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Builtin.Images</a></tt></td>
<td align="right">57%</td><td>4/7</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">25%</td><td>1/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="25%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">48%</td><td>24/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="48%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Chiphunk.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Chiphunk</a></tt></td>
<td align="right">57%</td><td>4/7</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>2/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">63%</td><td>121/192</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Effect.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Effect</a></tt></td>
<td align="right">52%</td><td>9/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="52%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">66%</td><td>4/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="66%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">51%</td><td>62/120</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="51%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Morph.Linear</a></tt></td>
<td align="right">50%</td><td>3/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>23/84</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.BoundingBox</a></tt></td>
<td align="right">40%</td><td>2/5</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>6/36</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">27%</td><td>76/281</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="27%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -88,12 +85,12 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Driver.CLI.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Driver.CLI</a></tt></td>
<td align="right">14%</td><td>5/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/63</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">8%</td><td>31/376</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">11%</td><td>9/78</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>55/2184</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Driver.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Driver</a></tt></td>
<td align="right">8%</td><td>1/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">1%</td><td>1/55</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="1%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>9/246</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Polygon</a></tt></td>
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
<td align="right">5%</td><td>1/18</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/44</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>39/762</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<tr>
@ -113,7 +110,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">0%</td><td>0/16</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/30</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/634</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.Common.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.Common</a></tt></td>
<td align="right">0%</td><td>0/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/370</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<td align="right">0%</td><td>0/27</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/413</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr>
<td>&nbsp;&nbsp;<tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Math.EarClip</a></tt></td>
<td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/260</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
@ -131,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
<tr></tr><tr style="background: #e0e0e0">
<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
<td align="right">31%</td><td>253/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">16%</td><td>131/811</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">30%</td><td>4760/15669</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4642/15831</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
</table></body></html>

View file

@ -32,164 +32,177 @@ span.spaces { background: white }
<span class="lineno"> 13 </span> , area2X -- :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 14 </span> , epsilon -- :: Fractional a =&gt; a
<span class="lineno"> 15 </span> , epsEq -- :: (Ord a, Fractional a) =&gt; a -&gt; a -&gt; Bool
<span class="lineno"> 16 </span> , isLeftTurn -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 17 </span> , isLeftTurnOrLinear -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 18 </span> , isRightTurn -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 19 </span> , isRightTurnOrLinear -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 20 </span> , direction -- :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 16 </span> , isLeftTurn -- :: (Num a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 17 </span> , isLeftTurnOrLinear -- :: (Num a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 18 </span> , isRightTurn -- :: (Num a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 19 </span> , isRightTurnOrLinear -- :: (Num a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 20 </span> , direction -- :: Num a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 21 </span> , isInside -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 22 </span> , barycentricCoords -- :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; (a, a, a)
<span class="lineno"> 23 </span> , rayIntersect -- :: (Fractional a, Ord a) =&gt; (V2 a,V2 a) -&gt; (V2 a,V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 24 </span> , isBetween -- :: (Ord a, Fractional a) =&gt; V2 a -&gt; (V2 a, V2 a) -&gt; Bool
<span class="lineno"> 25 </span> , lineIntersect -- :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 26 </span> , distSquared -- :: (Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 27 </span> , approxDist -- :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 28 </span> , distance' -- :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; Double
<span class="lineno"> 29 </span> , triangleAngles -- :: V2 Double -&gt; V2 Double -&gt; V2 Double -&gt; (Double, Double, Double)
<span class="lineno"> 30 </span> ) where
<span class="lineno"> 31 </span>
<span class="lineno"> 32 </span>import Data.Vector (Vector)
<span class="lineno"> 33 </span>import qualified Data.Vector as V
<span class="lineno"> 34 </span>import Linear.Matrix (det33)
<span class="lineno"> 35 </span>import Linear.Metric
<span class="lineno"> 36 </span>import Linear.V2
<span class="lineno"> 37 </span>import Linear.V3
<span class="lineno"> 38 </span>import Linear.Vector
<span class="lineno"> 39 </span>
<span class="lineno"> 40 </span>newtype Ring a = Ring (Vector (V2 a))
<span class="lineno"> 41 </span>
<span class="lineno"> 42 </span>ringSize :: Ring a -&gt; Int
<span class="lineno"> 43 </span><span class="decl"><span class="nottickedoff">ringSize (Ring v) = length v</span></span>
<span class="lineno"> 44 </span>
<span class="lineno"> 45 </span>ringAccess :: Ring a -&gt; Int -&gt; V2 a
<span class="lineno"> 46 </span><span class="decl"><span class="nottickedoff">ringAccess (Ring v) i = v V.! mod i (length v)</span></span>
<span class="lineno"> 47 </span>
<span class="lineno"> 48 </span>ringClamp :: Ring a -&gt; Int -&gt; Int
<span class="lineno"> 49 </span><span class="decl"><span class="nottickedoff">ringClamp (Ring v) i = mod i (length v)</span></span>
<span class="lineno"> 50 </span>
<span class="lineno"> 51 </span>ringUnpack :: Ring a -&gt; Vector (V2 a)
<span class="lineno"> 52 </span><span class="decl"><span class="nottickedoff">ringUnpack (Ring v) = v</span></span>
<span class="lineno"> 53 </span>
<span class="lineno"> 54 </span>ringPack :: Vector (V2 a) -&gt; Ring a
<span class="lineno"> 55 </span><span class="decl"><span class="nottickedoff">ringPack = Ring</span></span>
<span class="lineno"> 56 </span>
<span class="lineno"> 57 </span>ringMap :: (V2 a -&gt; V2 b) -&gt; Ring a -&gt; Ring b
<span class="lineno"> 58 </span><span class="decl"><span class="nottickedoff">ringMap fn (Ring v) = Ring (V.map fn v)</span></span>
<span class="lineno"> 59 </span>
<span class="lineno"> 60 </span>ringRayIntersect :: Ring Rational -&gt; (Int, Int) -&gt; (Int,Int) -&gt; Maybe (V2 Rational)
<span class="lineno"> 61 </span><span class="decl"><span class="nottickedoff">ringRayIntersect p (a,b) (c,d) =</span>
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="nottickedoff">rayIntersect (ringAccess p a, ringAccess p b) (ringAccess p c, ringAccess p d)</span></span>
<span class="lineno"> 63 </span>
<span class="lineno"> 22 </span> , isInsideStrict -- :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 23 </span> , barycentricCoords -- :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; (a, a, a)
<span class="lineno"> 24 </span> , rayIntersect -- :: (Fractional a, Ord a) =&gt; (V2 a,V2 a) -&gt; (V2 a,V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 25 </span> , isBetween -- :: (Ord a, Fractional a) =&gt; V2 a -&gt; (V2 a, V2 a) -&gt; Bool
<span class="lineno"> 26 </span> , lineIntersect -- :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 27 </span> , distSquared -- :: (Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 28 </span> , approxDist -- :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 29 </span> , distance' -- :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; Double
<span class="lineno"> 30 </span> , triangleAngles -- :: V2 Double -&gt; V2 Double -&gt; V2 Double -&gt; (Double, Double, Double)
<span class="lineno"> 31 </span> ) where
<span class="lineno"> 32 </span>
<span class="lineno"> 33 </span>import Data.Vector (Vector)
<span class="lineno"> 34 </span>import qualified Data.Vector as V
<span class="lineno"> 35 </span>import Linear.Matrix (det33)
<span class="lineno"> 36 </span>import Linear.Metric
<span class="lineno"> 37 </span>import Linear.V2
<span class="lineno"> 38 </span>import Linear.V3
<span class="lineno"> 39 </span>import Linear.Vector
<span class="lineno"> 40 </span>
<span class="lineno"> 41 </span>newtype Ring a = Ring (Vector (V2 a))
<span class="lineno"> 42 </span>
<span class="lineno"> 43 </span>ringSize :: Ring a -&gt; Int
<span class="lineno"> 44 </span><span class="decl"><span class="nottickedoff">ringSize (Ring v) = length v</span></span>
<span class="lineno"> 45 </span>
<span class="lineno"> 46 </span>ringAccess :: Ring a -&gt; Int -&gt; V2 a
<span class="lineno"> 47 </span><span class="decl"><span class="nottickedoff">ringAccess (Ring v) i = v V.! mod i (length v)</span></span>
<span class="lineno"> 48 </span>
<span class="lineno"> 49 </span>ringClamp :: Ring a -&gt; Int -&gt; Int
<span class="lineno"> 50 </span><span class="decl"><span class="nottickedoff">ringClamp (Ring v) i = mod i (length v)</span></span>
<span class="lineno"> 51 </span>
<span class="lineno"> 52 </span>ringUnpack :: Ring a -&gt; Vector (V2 a)
<span class="lineno"> 53 </span><span class="decl"><span class="nottickedoff">ringUnpack (Ring v) = v</span></span>
<span class="lineno"> 54 </span>
<span class="lineno"> 55 </span>ringPack :: Vector (V2 a) -&gt; Ring a
<span class="lineno"> 56 </span><span class="decl"><span class="nottickedoff">ringPack = Ring</span></span>
<span class="lineno"> 57 </span>
<span class="lineno"> 58 </span>ringMap :: (V2 a -&gt; V2 b) -&gt; Ring a -&gt; Ring b
<span class="lineno"> 59 </span><span class="decl"><span class="nottickedoff">ringMap fn (Ring v) = Ring (V.map fn v)</span></span>
<span class="lineno"> 60 </span>
<span class="lineno"> 61 </span>ringRayIntersect :: Ring Rational -&gt; (Int, Int) -&gt; (Int,Int) -&gt; Maybe (V2 Rational)
<span class="lineno"> 62 </span><span class="decl"><span class="nottickedoff">ringRayIntersect p (a,b) (c,d) =</span>
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="nottickedoff">rayIntersect (ringAccess p a, ringAccess p b) (ringAccess p c, ringAccess p d)</span></span>
<span class="lineno"> 64 </span>
<span class="lineno"> 65 </span>area :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 66 </span><span class="decl"><span class="nottickedoff">area a b c = 1/2 * area2X a b c</span></span>
<span class="lineno"> 67 </span>
<span class="lineno"> 68 </span>area2X :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 69 </span><span class="decl"><span class="nottickedoff">area2X (V2 a1 a2) (V2 b1 b2) (V2 c1 c2) =</span>
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="nottickedoff">det33 (V3 (V3 a1 a2 1)</span>
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="nottickedoff">(V3 b1 b2 1)</span>
<span class="lineno"> 72 </span><span class="spaces"> </span><span class="nottickedoff">(V3 c1 c2 1))</span></span>
<span class="lineno"> 73 </span>
<span class="lineno"> 74 </span>epsilon :: Fractional a =&gt; a
<span class="lineno"> 75 </span><span class="decl"><span class="nottickedoff">epsilon = 1e-13</span></span>
<span class="lineno"> 76 </span>
<span class="lineno"> 77 </span>epsEq :: (Ord a, Fractional a) =&gt; a -&gt; a -&gt; Bool
<span class="lineno"> 78 </span><span class="decl"><span class="nottickedoff">epsEq a b = abs (a-b) &lt; epsilon</span></span>
<span class="lineno"> 79 </span>
<span class="lineno"> 80 </span>{-# INLINE isLeftTurn #-}
<span class="lineno"> 81 </span>-- Left turn.
<span class="lineno"> 82 </span>isLeftTurn :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 83 </span><span class="decl"><span class="nottickedoff">isLeftTurn p1 p2 p3 =</span>
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">case compare (direction p1 p2 p3) 0 of</span>
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="nottickedoff">LT -&gt; True</span>
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="nottickedoff">EQ -&gt; False -- colnear</span>
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="nottickedoff">GT -&gt; False</span></span>
<span class="lineno"> 88 </span>
<span class="lineno"> 89 </span>{-# INLINE isLeftTurnOrLinear #-}
<span class="lineno"> 90 </span>isLeftTurnOrLinear :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 91 </span><span class="decl"><span class="nottickedoff">isLeftTurnOrLinear p1 p2 p3 =</span>
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">case compare (direction p1 p2 p3) 0 of</span>
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="nottickedoff">LT -&gt; True</span>
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="nottickedoff">EQ -&gt; True -- colnear</span>
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="nottickedoff">GT -&gt; False</span></span>
<span class="lineno"> 96 </span>
<span class="lineno"> 97 </span>{-# INLINE isRightTurn #-}
<span class="lineno"> 98 </span>isRightTurn :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 99 </span><span class="decl"><span class="nottickedoff">isRightTurn a b c = not (isLeftTurnOrLinear a b c)</span></span>
<span class="lineno"> 100 </span>
<span class="lineno"> 101 </span>{-# INLINE isRightTurnOrLinear #-}
<span class="lineno"> 102 </span>isRightTurnOrLinear :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 103 </span><span class="decl"><span class="nottickedoff">isRightTurnOrLinear a b c = not (isLeftTurn a b c)</span></span>
<span class="lineno"> 104 </span>
<span class="lineno"> 105 </span>{-# INLINE direction #-}
<span class="lineno"> 106 </span>direction :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 107 </span><span class="decl"><span class="nottickedoff">direction p1 p2 p3 = crossZ (p3-p1) (p2-p1)</span></span>
<span class="lineno"> 108 </span>
<span class="lineno"> 109 </span>{-# INLINE isInside #-}
<span class="lineno"> 110 </span>isInside :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 111 </span><span class="decl"><span class="nottickedoff">isInside a b c d =</span>
<span class="lineno"> 112 </span><span class="spaces"> </span><span class="nottickedoff">s &gt;= 0 &amp;&amp; s &lt;= 1 &amp;&amp; t &gt;= 0 &amp;&amp; t &lt;= 1</span>
<span class="lineno"> 113 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 114 </span><span class="spaces"> </span><span class="nottickedoff">(s, t, _) = barycentricCoords a b c d</span></span>
<span class="lineno"> 115 </span>
<span class="lineno"> 116 </span>{-# INLINE barycentricCoords #-}
<span class="lineno"> 117 </span>barycentricCoords :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; (a, a, a)
<span class="lineno"> 118 </span><span class="decl"><span class="nottickedoff">barycentricCoords (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x y) =</span>
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">(lam1, lam2, lam3)</span>
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 121 </span><span class="spaces"> </span><span class="nottickedoff">lam1 = ((y2-y3)*(x-x3) + (x3 - x2)*(y-y3)) /</span>
<span class="lineno"> 122 </span><span class="spaces"> </span><span class="nottickedoff">((y2-y3)*(x1-x3) + (x3-x2)*(y1-y3))</span>
<span class="lineno"> 123 </span><span class="spaces"> </span><span class="nottickedoff">lam2 = ((y3-y1)*(x-x3) + (x1-x3)*(y-y3)) /</span>
<span class="lineno"> 124 </span><span class="spaces"> </span><span class="nottickedoff">((y2-y3)*(x1-x3) + (x3-x2)*(y1-y3))</span>
<span class="lineno"> 125 </span><span class="spaces"> </span><span class="nottickedoff">lam3 = 1 - lam1 - lam2</span></span>
<span class="lineno"> 126 </span>
<span class="lineno"> 127 </span>
<span class="lineno"> 128 </span>{-# INLINE rayIntersect #-}
<span class="lineno"> 129 </span>rayIntersect :: (Fractional a, Ord a) =&gt; (V2 a,V2 a) -&gt; (V2 a,V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 130 </span><span class="decl"><span class="nottickedoff">rayIntersect (V2 x1 y1,V2 x2 y2) (V2 x3 y3, V2 x4 y4)</span>
<span class="lineno"> 131 </span><span class="spaces"> </span><span class="nottickedoff">| yBot == 0 = Nothing</span>
<span class="lineno"> 132 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise = Just $</span>
<span class="lineno"> 133 </span><span class="spaces"> </span><span class="nottickedoff">V2 (xTop/xBot) (yTop/yBot)</span>
<span class="lineno"> 134 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="nottickedoff">xTop = (x1*y2 - y1*x2)*(x3-x4) - (x1 - x2)*(x3*y4-y3*x4)</span>
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="nottickedoff">xBot = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)</span>
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="nottickedoff">yTop = (x1*y2 - y1*x2)*(y3-y4) - (y1-y2)*(x3*y4-y3*x4)</span>
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="nottickedoff">yBot = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)</span></span>
<span class="lineno"> 65 </span>
<span class="lineno"> 66 </span>area :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 67 </span><span class="decl"><span class="nottickedoff">area a b c = 1/2 * area2X a b c</span></span>
<span class="lineno"> 68 </span>
<span class="lineno"> 69 </span>area2X :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 70 </span><span class="decl"><span class="nottickedoff">area2X (V2 a1 a2) (V2 b1 b2) (V2 c1 c2) =</span>
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="nottickedoff">det33 (V3 (V3 a1 a2 1)</span>
<span class="lineno"> 72 </span><span class="spaces"> </span><span class="nottickedoff">(V3 b1 b2 1)</span>
<span class="lineno"> 73 </span><span class="spaces"> </span><span class="nottickedoff">(V3 c1 c2 1))</span></span>
<span class="lineno"> 74 </span>
<span class="lineno"> 75 </span>epsilon :: Fractional a =&gt; a
<span class="lineno"> 76 </span><span class="decl"><span class="nottickedoff">epsilon = 1e-13</span></span>
<span class="lineno"> 77 </span>
<span class="lineno"> 78 </span>epsEq :: (Ord a, Fractional a) =&gt; a -&gt; a -&gt; Bool
<span class="lineno"> 79 </span><span class="decl"><span class="nottickedoff">epsEq a b = abs (a-b) &lt; epsilon</span></span>
<span class="lineno"> 80 </span>
<span class="lineno"> 81 </span>compareEpsZero :: (Ord a, Fractional a) =&gt; a -&gt; Ordering
<span class="lineno"> 82 </span><span class="decl"><span class="nottickedoff">compareEpsZero val</span>
<span class="lineno"> 83 </span><span class="spaces"> </span><span class="nottickedoff">| abs val &lt; epsilon = EQ</span>
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise = compare val 0</span></span>
<span class="lineno"> 85 </span>
<span class="lineno"> 86 </span>{-# INLINE isLeftTurn #-}
<span class="lineno"> 87 </span>-- Left turn.
<span class="lineno"> 88 </span>isLeftTurn :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 89 </span><span class="decl"><span class="nottickedoff">isLeftTurn p1 p2 p3 =</span>
<span class="lineno"> 90 </span><span class="spaces"> </span><span class="nottickedoff">case compareEpsZero (direction p1 p2 p3) of</span>
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="nottickedoff">LT -&gt; True</span>
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">EQ -&gt; False -- colinear</span>
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="nottickedoff">GT -&gt; False</span></span>
<span class="lineno"> 94 </span>
<span class="lineno"> 95 </span>{-# INLINE isLeftTurnOrLinear #-}
<span class="lineno"> 96 </span>isLeftTurnOrLinear :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 97 </span><span class="decl"><span class="nottickedoff">isLeftTurnOrLinear p1 p2 p3 =</span>
<span class="lineno"> 98 </span><span class="spaces"> </span><span class="nottickedoff">case compareEpsZero (direction p1 p2 p3) of</span>
<span class="lineno"> 99 </span><span class="spaces"> </span><span class="nottickedoff">LT -&gt; True</span>
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="nottickedoff">EQ -&gt; True -- colinear</span>
<span class="lineno"> 101 </span><span class="spaces"> </span><span class="nottickedoff">GT -&gt; False</span></span>
<span class="lineno"> 102 </span>
<span class="lineno"> 103 </span>{-# INLINE isRightTurn #-}
<span class="lineno"> 104 </span>isRightTurn :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 105 </span><span class="decl"><span class="nottickedoff">isRightTurn a b c = not (isLeftTurnOrLinear a b c)</span></span>
<span class="lineno"> 106 </span>
<span class="lineno"> 107 </span>{-# INLINE isRightTurnOrLinear #-}
<span class="lineno"> 108 </span>isRightTurnOrLinear :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 109 </span><span class="decl"><span class="nottickedoff">isRightTurnOrLinear a b c = not (isLeftTurn a b c)</span></span>
<span class="lineno"> 110 </span>
<span class="lineno"> 111 </span>{-# INLINE direction #-}
<span class="lineno"> 112 </span>direction :: Num a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 113 </span><span class="decl"><span class="nottickedoff">direction p1 p2 p3 = crossZ (p3-p1) (p2-p1)</span></span>
<span class="lineno"> 114 </span>
<span class="lineno"> 115 </span>{-# INLINE isInside #-}
<span class="lineno"> 116 </span>isInside :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 117 </span><span class="decl"><span class="nottickedoff">isInside a b c d =</span>
<span class="lineno"> 118 </span><span class="spaces"> </span><span class="nottickedoff">s &gt;= 0 &amp;&amp; s &lt;= 1 &amp;&amp; t &gt;= 0 &amp;&amp; t &lt;= 1 &amp;&amp; i &gt;= 0 &amp;&amp; i &lt;= 1</span>
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">(s, t, i) = barycentricCoords a b c d</span></span>
<span class="lineno"> 121 </span>
<span class="lineno"> 122 </span>{-# INLINE isInsideStrict #-}
<span class="lineno"> 123 </span>isInsideStrict :: (Fractional a, Ord a) =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; Bool
<span class="lineno"> 124 </span><span class="decl"><span class="nottickedoff">isInsideStrict a b c d =</span>
<span class="lineno"> 125 </span><span class="spaces"> </span><span class="nottickedoff">s &gt; 0 &amp;&amp; s &lt; 1 &amp;&amp; t &gt; 0 &amp;&amp; t &lt; 1 &amp;&amp; i &gt; 0 &amp;&amp; i &lt; 1</span>
<span class="lineno"> 126 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 127 </span><span class="spaces"> </span><span class="nottickedoff">(s, t, i) = barycentricCoords a b c d</span></span>
<span class="lineno"> 128 </span>
<span class="lineno"> 129 </span>{-# INLINE barycentricCoords #-}
<span class="lineno"> 130 </span>barycentricCoords :: Fractional a =&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; V2 a -&gt; (a, a, a)
<span class="lineno"> 131 </span><span class="decl"><span class="nottickedoff">barycentricCoords (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x y) =</span>
<span class="lineno"> 132 </span><span class="spaces"> </span><span class="nottickedoff">(lam1, lam2, lam3)</span>
<span class="lineno"> 133 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 134 </span><span class="spaces"> </span><span class="nottickedoff">lam1 = ((y2-y3)*(x-x3) + (x3 - x2)*(y-y3)) /</span>
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="nottickedoff">((y2-y3)*(x1-x3) + (x3-x2)*(y1-y3))</span>
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="nottickedoff">lam2 = ((y3-y1)*(x-x3) + (x1-x3)*(y-y3)) /</span>
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="nottickedoff">((y2-y3)*(x1-x3) + (x3-x2)*(y1-y3))</span>
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="nottickedoff">lam3 = 1 - lam1 - lam2</span></span>
<span class="lineno"> 139 </span>
<span class="lineno"> 140 </span>{-# INLINE isBetween #-}
<span class="lineno"> 141 </span>isBetween :: (Ord a, Fractional a) =&gt; V2 a -&gt; (V2 a, V2 a) -&gt; Bool
<span class="lineno"> 142 </span><span class="decl"><span class="nottickedoff">isBetween (V2 x y) (V2 x1 y1, V2 x2 y2) =</span>
<span class="lineno"> 143 </span><span class="spaces"> </span><span class="nottickedoff">((y1 &gt; y) /= (y2 &gt; y) || y == y1 || y == y2) &amp;&amp; -- y is between y1 and y2</span>
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="nottickedoff">((x1 &gt; x) /= (x2 &gt; x) || x == x1 || x == x2)</span></span>
<span class="lineno"> 145 </span>
<span class="lineno"> 146 </span>{-# INLINE lineIntersect #-}
<span class="lineno"> 147 </span>lineIntersect :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 148 </span><span class="decl"><span class="nottickedoff">lineIntersect a b =</span>
<span class="lineno"> 149 </span><span class="spaces"> </span><span class="nottickedoff">case rayIntersect a b of</span>
<span class="lineno"> 150 </span><span class="spaces"> </span><span class="nottickedoff">Just u</span>
<span class="lineno"> 151 </span><span class="spaces"> </span><span class="nottickedoff">| isBetween u a &amp;&amp; isBetween u b -&gt; Just u</span>
<span class="lineno"> 152 </span><span class="spaces"> </span><span class="nottickedoff">_ -&gt; Nothing</span></span>
<span class="lineno"> 153 </span>
<span class="lineno"> 154 </span>-- circleIntersect :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; [V2 a]
<span class="lineno"> 155 </span>
<span class="lineno"> 156 </span>distSquared :: (Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 157 </span><span class="decl"><span class="nottickedoff">distSquared a b = quadrance (a ^-^ b)</span></span>
<span class="lineno"> 140 </span>
<span class="lineno"> 141 </span>{-# INLINE rayIntersect #-}
<span class="lineno"> 142 </span>rayIntersect :: (Fractional a, Ord a) =&gt; (V2 a,V2 a) -&gt; (V2 a,V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 143 </span><span class="decl"><span class="nottickedoff">rayIntersect (V2 x1 y1,V2 x2 y2) (V2 x3 y3, V2 x4 y4)</span>
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="nottickedoff">| yBot == 0 = Nothing</span>
<span class="lineno"> 145 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise = Just $</span>
<span class="lineno"> 146 </span><span class="spaces"> </span><span class="nottickedoff">V2 (xTop/xBot) (yTop/yBot)</span>
<span class="lineno"> 147 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 148 </span><span class="spaces"> </span><span class="nottickedoff">xTop = (x1*y2 - y1*x2)*(x3-x4) - (x1 - x2)*(x3*y4-y3*x4)</span>
<span class="lineno"> 149 </span><span class="spaces"> </span><span class="nottickedoff">xBot = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)</span>
<span class="lineno"> 150 </span><span class="spaces"> </span><span class="nottickedoff">yTop = (x1*y2 - y1*x2)*(y3-y4) - (y1-y2)*(x3*y4-y3*x4)</span>
<span class="lineno"> 151 </span><span class="spaces"> </span><span class="nottickedoff">yBot = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)</span></span>
<span class="lineno"> 152 </span>
<span class="lineno"> 153 </span>{-# INLINE isBetween #-}
<span class="lineno"> 154 </span>isBetween :: (Ord a, Fractional a) =&gt; V2 a -&gt; (V2 a, V2 a) -&gt; Bool
<span class="lineno"> 155 </span><span class="decl"><span class="nottickedoff">isBetween (V2 x y) (V2 x1 y1, V2 x2 y2) =</span>
<span class="lineno"> 156 </span><span class="spaces"> </span><span class="nottickedoff">((y1 &gt; y) /= (y2 &gt; y) || y == y1 || y == y2) &amp;&amp; -- y is between y1 and y2</span>
<span class="lineno"> 157 </span><span class="spaces"> </span><span class="nottickedoff">((x1 &gt; x) /= (x2 &gt; x) || x == x1 || x == x2)</span></span>
<span class="lineno"> 158 </span>
<span class="lineno"> 159 </span>approxDist :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 160 </span><span class="decl"><span class="nottickedoff">approxDist a b = realToFrac (sqrt (realToFrac (distSquared a b) :: Double))</span></span>
<span class="lineno"> 161 </span>
<span class="lineno"> 162 </span>distance' :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; Double
<span class="lineno"> 163 </span><span class="decl"><span class="nottickedoff">distance' a b = sqrt (realToFrac (distSquared a b))</span></span>
<span class="lineno"> 164 </span>
<span class="lineno"> 165 </span>-- sum of angles is always pi.
<span class="lineno"> 166 </span>triangleAngles :: V2 Double -&gt; V2 Double -&gt; V2 Double -&gt; (Double, Double, Double)
<span class="lineno"> 167 </span><span class="decl"><span class="nottickedoff">triangleAngles a b c =</span>
<span class="lineno"> 168 </span><span class="spaces"> </span><span class="nottickedoff">(findAngle (b-a) (c-a)</span>
<span class="lineno"> 169 </span><span class="spaces"> </span><span class="nottickedoff">,findAngle (c-b) (a-b)</span>
<span class="lineno"> 170 </span><span class="spaces"> </span><span class="nottickedoff">,findAngle (a-c) (b-c))</span>
<span class="lineno"> 171 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 172 </span><span class="spaces"> </span><span class="nottickedoff">findAngle v1 v2 = abs (atan2 (crossZ v1 v2) (dot v1 v2))</span></span>
<span class="lineno"> 173 </span> -- findAngle v1 v2 = acos (dot v1 v2 / (norm v1 * norm v2))
<span class="lineno"> 159 </span>{-# INLINE lineIntersect #-}
<span class="lineno"> 160 </span>lineIntersect :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; Maybe (V2 a)
<span class="lineno"> 161 </span><span class="decl"><span class="nottickedoff">lineIntersect a b =</span>
<span class="lineno"> 162 </span><span class="spaces"> </span><span class="nottickedoff">case rayIntersect a b of</span>
<span class="lineno"> 163 </span><span class="spaces"> </span><span class="nottickedoff">Just u</span>
<span class="lineno"> 164 </span><span class="spaces"> </span><span class="nottickedoff">| isBetween u a &amp;&amp; isBetween u b -&gt; Just u</span>
<span class="lineno"> 165 </span><span class="spaces"> </span><span class="nottickedoff">_ -&gt; Nothing</span></span>
<span class="lineno"> 166 </span>
<span class="lineno"> 167 </span>-- circleIntersect :: (Ord a, Fractional a) =&gt; (V2 a, V2 a) -&gt; (V2 a, V2 a) -&gt; [V2 a]
<span class="lineno"> 168 </span>
<span class="lineno"> 169 </span>distSquared :: (Num a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 170 </span><span class="decl"><span class="nottickedoff">distSquared a b = quadrance (a ^-^ b)</span></span>
<span class="lineno"> 171 </span>
<span class="lineno"> 172 </span>approxDist :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; a
<span class="lineno"> 173 </span><span class="decl"><span class="nottickedoff">approxDist a b = realToFrac (sqrt (realToFrac (distSquared a b) :: Double))</span></span>
<span class="lineno"> 174 </span>
<span class="lineno"> 175 </span>distance' :: (Real a, Fractional a) =&gt; V2 a -&gt; V2 a -&gt; Double
<span class="lineno"> 176 </span><span class="decl"><span class="nottickedoff">distance' a b = sqrt (realToFrac (distSquared a b))</span></span>
<span class="lineno"> 177 </span>
<span class="lineno"> 178 </span>-- sum of angles is always pi.
<span class="lineno"> 179 </span>triangleAngles :: V2 Double -&gt; V2 Double -&gt; V2 Double -&gt; (Double, Double, Double)
<span class="lineno"> 180 </span><span class="decl"><span class="nottickedoff">triangleAngles a b c =</span>
<span class="lineno"> 181 </span><span class="spaces"> </span><span class="nottickedoff">(findAngle (b-a) (c-a)</span>
<span class="lineno"> 182 </span><span class="spaces"> </span><span class="nottickedoff">,findAngle (c-b) (a-b)</span>
<span class="lineno"> 183 </span><span class="spaces"> </span><span class="nottickedoff">,findAngle (a-c) (b-c))</span>
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">findAngle v1 v2 = abs (atan2 (crossZ v1 v2) (dot v1 v2))</span></span>
<span class="lineno"> 186 </span> -- findAngle v1 v2 = acos (dot v1 v2 / (norm v1 * norm v2))
</pre>
</body>

File diff suppressed because it is too large Load diff

View file

@ -45,7 +45,7 @@ span.spaces { background: white }
<span class="lineno"> 26 </span>import Reanimate.Animation
<span class="lineno"> 27 </span>import Reanimate.ColorComponents
<span class="lineno"> 28 </span>import Reanimate.Ease
<span class="lineno"> 29 </span>import Reanimate.Math.Polygon (Polygon, mkPolygon, pAddPoints,
<span class="lineno"> 29 </span>import Reanimate.Math.Polygon (Polygon, APolygon, mkPolygon, pAddPoints,
<span class="lineno"> 30 </span> pCentroid, pCutEqual, pSize,
<span class="lineno"> 31 </span> polygonPoints)
<span class="lineno"> 32 </span>import Reanimate.PolyShape
@ -74,134 +74,135 @@ span.spaces { background: white }
<span class="lineno"> 55 </span> , <span class="nottickedoff"><span class="decl"><span class="nottickedoff">morphObjectCorrespondence</span></span></span> :: ObjectCorrespondence
<span class="lineno"> 56 </span> }
<span class="lineno"> 57 </span>
<span class="lineno"> 58 </span>morph :: Morph -&gt; SVG -&gt; SVG -&gt; Double -&gt; SVG
<span class="lineno"> 59 </span><span class="decl"><span class="istickedoff">morph Morph{..} src dst = \t -&gt;</span>
<span class="lineno"> 60 </span><span class="spaces"> </span><span class="istickedoff">case <span class="nottickedoff">t</span> of</span>
<span class="lineno"> 61 </span><span class="spaces"> </span><span class="istickedoff">-- 0 -&gt; lowerTransformations src</span>
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="istickedoff">-- 1 -&gt; lowerTransformations dst</span>
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="istickedoff">_ -&gt; mkGroup</span>
<span class="lineno"> 64 </span><span class="spaces"> </span><span class="istickedoff">[ render (genPoints t)</span>
<span class="lineno"> 65 </span><span class="spaces"> </span><span class="istickedoff">&amp; drawAttributes .~ genAttrs <span class="nottickedoff">t</span></span>
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="istickedoff">| (genAttrs, genPoints) &lt;- gens</span>
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="istickedoff">]</span>
<span class="lineno"> 68 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 69 </span><span class="spaces"> </span><span class="istickedoff">render p = mkLinePathClosed</span>
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="istickedoff">[ (x,y) | V2 x y &lt;- map (fmap realToFrac) $ V.toList $ polygonPoints p ]</span>
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="istickedoff">srcShapes = toShapes morphTolerance src</span>
<span class="lineno"> 72 </span><span class="spaces"> </span><span class="istickedoff">dstShapes = toShapes morphTolerance dst</span>
<span class="lineno"> 73 </span><span class="spaces"> </span><span class="istickedoff">pairs = morphObjectCorrespondence srcShapes dstShapes</span>
<span class="lineno"> 74 </span><span class="spaces"> </span><span class="istickedoff">gens =</span>
<span class="lineno"> 75 </span><span class="spaces"> </span><span class="istickedoff">[ (interpolateAttrs <span class="nottickedoff">morphColorComponents</span> srcAttr <span class="nottickedoff">dstAttr</span>, morphTrajectory arranged)</span>
<span class="lineno"> 76 </span><span class="spaces"> </span><span class="istickedoff">| ((srcAttr, srcPoly'), (dstAttr, dstPoly')) &lt;- pairs</span>
<span class="lineno"> 77 </span><span class="spaces"> </span><span class="istickedoff">, let arranged = morphPointCorrespondence srcPoly' dstPoly'</span>
<span class="lineno"> 78 </span><span class="spaces"> </span><span class="istickedoff">]</span></span>
<span class="lineno"> 79 </span>
<span class="lineno"> 80 </span>normalizePolygons :: Polygon -&gt; Polygon -&gt; (Polygon, Polygon)
<span class="lineno"> 81 </span><span class="decl"><span class="istickedoff">normalizePolygons src dst =</span>
<span class="lineno"> 82 </span><span class="spaces"> </span><span class="istickedoff">(pAddPoints (max 0 $ dstN-srcN) src</span>
<span class="lineno"> 83 </span><span class="spaces"> </span><span class="istickedoff">,pAddPoints (max 0 $ srcN-dstN) dst)</span>
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="istickedoff">srcN = pSize src</span>
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="istickedoff">dstN = pSize dst</span></span>
<span class="lineno"> 87 </span>
<span class="lineno"> 88 </span>interpolateAttrs :: ColorComponents -&gt; DrawAttributes -&gt; DrawAttributes -&gt; Double -&gt; DrawAttributes
<span class="lineno"> 89 </span><span class="decl"><span class="istickedoff">interpolateAttrs colorComps src dst t =</span>
<span class="lineno"> 90 </span><span class="spaces"> </span><span class="istickedoff">src &amp; fillColor .~ (<span class="nottickedoff">interpColor</span> &lt;$&gt; src^.fillColor &lt;*&gt; <span class="nottickedoff">dst^.fillColor</span>)</span>
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="istickedoff">&amp; strokeColor .~ (<span class="nottickedoff">interpColor</span> &lt;$&gt; src^.strokeColor &lt;*&gt; <span class="nottickedoff">dst^.strokeColor</span>)</span>
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="istickedoff">&amp; fillOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.fillOpacity &lt;*&gt; <span class="nottickedoff">dst^.fillOpacity</span>)</span>
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="istickedoff">&amp; groupOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.groupOpacity &lt;*&gt; <span class="nottickedoff">dst^.groupOpacity</span>)</span>
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="istickedoff">&amp; strokeOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.strokeOpacity &lt;*&gt; <span class="nottickedoff">dst^.strokeOpacity</span>)</span>
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 96 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpColor (ColorRef a) (ColorRef b) =</span></span>
<span class="lineno"> 97 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">ColorRef $ interpolateRGBA8 colorComps a b t</span></span>
<span class="lineno"> 98 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">-- interpolateColor (ColorRef a) FillNone = ColorRef a</span></span>
<span class="lineno"> 99 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpColor a _ = a</span></span>
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpOpacity a b = realToFrac (fromToS (realToFrac a) (realToFrac b) t)</span></span></span>
<span class="lineno"> 101 </span>
<span class="lineno"> 102 </span>genesisObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 103 </span><span class="decl"><span class="nottickedoff">genesisObjectCorrespondence left right =</span>
<span class="lineno"> 104 </span><span class="spaces"> </span><span class="nottickedoff">case (left, right) of</span>
<span class="lineno"> 105 </span><span class="spaces"> </span><span class="nottickedoff">([] , []) -&gt; []</span>
<span class="lineno"> 106 </span><span class="spaces"> </span><span class="nottickedoff">([], (y1,y2):ys) -&gt;</span>
<span class="lineno"> 107 </span><span class="spaces"> </span><span class="nottickedoff">((y1,y2), (y1, emptyFrom y2 y2)) : genesisObjectCorrespondence [] ys</span>
<span class="lineno"> 108 </span><span class="spaces"> </span><span class="nottickedoff">((x1,x2):xs, []) -&gt;</span>
<span class="lineno"> 109 </span><span class="spaces"> </span><span class="nottickedoff">((x1,x2), (x1, emptyFrom x2 x2)) : genesisObjectCorrespondence xs []</span>
<span class="lineno"> 110 </span><span class="spaces"> </span><span class="nottickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 111 </span><span class="spaces"> </span><span class="nottickedoff">(x,y) : genesisObjectCorrespondence xs ys</span>
<span class="lineno"> 112 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 113 </span><span class="spaces"> </span><span class="nottickedoff">emptyFrom a b = mkPolygon $ V.map (const $ pCentroid a) (polygonPoints b)</span></span>
<span class="lineno"> 114 </span>
<span class="lineno"> 115 </span>dupObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 116 </span><span class="decl"><span class="nottickedoff">dupObjectCorrespondence left right =</span>
<span class="lineno"> 117 </span><span class="spaces"> </span><span class="nottickedoff">case (left, right) of</span>
<span class="lineno"> 118 </span><span class="spaces"> </span><span class="nottickedoff">(_, []) -&gt; []</span>
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">([], _) -&gt; []</span>
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">([x], [y]) -&gt;</span>
<span class="lineno"> 121 </span><span class="spaces"> </span><span class="nottickedoff">[(x,y)]</span>
<span class="lineno"> 122 </span><span class="spaces"> </span><span class="nottickedoff">([(x1,x2)], yShapes) -&gt;</span>
<span class="lineno"> 123 </span><span class="spaces"> </span><span class="nottickedoff">let x2s = replicate (length yShapes) x2</span>
<span class="lineno"> 124 </span><span class="spaces"> </span><span class="nottickedoff">in dupObjectCorrespondence (map (x1,) x2s) yShapes</span>
<span class="lineno"> 125 </span><span class="spaces"> </span><span class="nottickedoff">(xShapes, [(y1,y2)]) -&gt;</span>
<span class="lineno"> 126 </span><span class="spaces"> </span><span class="nottickedoff">let y2s = replicate (length xShapes) y2</span>
<span class="lineno"> 127 </span><span class="spaces"> </span><span class="nottickedoff">in dupObjectCorrespondence xShapes (map (y1,) y2s)</span>
<span class="lineno"> 128 </span><span class="spaces"> </span><span class="nottickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 129 </span><span class="spaces"> </span><span class="nottickedoff">(x, y) : dupObjectCorrespondence xs ys</span></span>
<span class="lineno"> 130 </span>
<span class="lineno"> 131 </span>splitObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 132 </span>-- splitObjectCorrespondence = dupObjectCorrespondence
<span class="lineno"> 133 </span><span class="decl"><span class="istickedoff">splitObjectCorrespondence left right =</span>
<span class="lineno"> 134 </span><span class="spaces"> </span><span class="istickedoff">case (left, right) of</span>
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="istickedoff">(_, []) -&gt; <span class="nottickedoff">[]</span></span>
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="istickedoff">([], _) -&gt; <span class="nottickedoff">[]</span></span>
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="istickedoff">([x], [y]) -&gt;</span>
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="istickedoff">[(x,y)]</span>
<span class="lineno"> 139 </span><span class="spaces"> </span><span class="istickedoff">([(x1,x2)], yShapes) -&gt;</span>
<span class="lineno"> 140 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">let x2s = splitPolygon (length yShapes) x2</span></span>
<span class="lineno"> 141 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">in splitObjectCorrespondence (map (x1,) x2s) yShapes</span></span>
<span class="lineno"> 142 </span><span class="spaces"> </span><span class="istickedoff">(xShapes, [(y1,y2)]) -&gt;</span>
<span class="lineno"> 143 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">let y2s = splitPolygon (length xShapes) y2</span></span>
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">in splitObjectCorrespondence xShapes (map (y1,) y2s)</span></span>
<span class="lineno"> 145 </span><span class="spaces"> </span><span class="istickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 146 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">(x,y) : splitObjectCorrespondence xs ys</span></span></span>
<span class="lineno"> 147 </span>
<span class="lineno"> 148 </span>splitPolygon :: Int -&gt; Polygon -&gt; [Polygon]
<span class="lineno"> 149 </span><span class="decl"><span class="nottickedoff">splitPolygon 1 p = [p]</span>
<span class="lineno"> 150 </span><span class="spaces"></span><span class="nottickedoff">splitPolygon n p =</span>
<span class="lineno"> 151 </span><span class="spaces"> </span><span class="nottickedoff">let (a,b) = pCutEqual p</span>
<span class="lineno"> 152 </span><span class="spaces"> </span><span class="nottickedoff">in splitPolygon (n`div`2) a ++ splitPolygon ((n+1)`div`2) b</span></span>
<span class="lineno"> 153 </span>
<span class="lineno"> 154 </span>-- joinPairs :: Correspondence -&gt; [(DrawAttributes, PolyShape)] -&gt; [(DrawAttributes, PolyShape)]
<span class="lineno"> 155 </span>-- -&gt; [(DrawAttributes, DrawAttributes, [(RPoint, RPoint)])]
<span class="lineno"> 156 </span>-- joinPairs _ _ [] = []
<span class="lineno"> 157 </span>-- joinPairs _ [] _ = []
<span class="lineno"> 158 </span>-- joinPairs corr [(x1,x2)] [(y1,y2)] =
<span class="lineno"> 159 </span>-- [(x1,y1, corr x2 y2)]
<span class="lineno"> 160 </span>-- joinPairs corr [(x1,x2)] yShapes =
<span class="lineno"> 161 </span>-- let x2s = splitPolyShape 0.001 (length yShapes) x2
<span class="lineno"> 162 </span>-- in joinPairs corr (map (x1,) x2s) yShapes
<span class="lineno"> 163 </span>-- joinPairs corr xShapes [(y1,y2)] =
<span class="lineno"> 164 </span>-- let y2s = reverse $ splitPolyShape 0.001 (length xShapes) y2
<span class="lineno"> 165 </span>-- in joinPairs corr xShapes (map (y1,) y2s)
<span class="lineno"> 166 </span>-- joinPairs corr ((x1,x2):xs) ((y1,y2):ys) =
<span class="lineno"> 167 </span>-- (x1,y1, corr x2 y2) : joinPairs corr xs ys
<span class="lineno"> 168 </span>-- joinPairs _ _ _ = []
<span class="lineno"> 169 </span>
<span class="lineno"> 170 </span>-- FIXME: sort by size, smallest to largest
<span class="lineno"> 171 </span>toShapes :: Double -&gt; SVG -&gt; [(DrawAttributes, Polygon)]
<span class="lineno"> 172 </span><span class="decl"><span class="istickedoff">toShapes tol src =</span>
<span class="lineno"> 173 </span><span class="spaces"> </span><span class="istickedoff">[ (attrs, plToPolygon tol shape)</span>
<span class="lineno"> 174 </span><span class="spaces"> </span><span class="istickedoff">| (_, attrs, glyph) &lt;- svgGlyphs $ lowerTransformations $ pathify src</span>
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="istickedoff">, shape &lt;- map mergePolyShapeHoles $ plGroupShapes $ svgToPolyShapes glyph</span>
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="istickedoff">]</span></span>
<span class="lineno"> 177 </span>
<span class="lineno"> 178 </span>unsafeSVGToPolygon :: Double -&gt; SVG -&gt; Polygon
<span class="lineno"> 179 </span><span class="decl"><span class="nottickedoff">unsafeSVGToPolygon tol src = snd $ head $ toShapes tol src</span></span>
<span class="lineno"> 180 </span>
<span class="lineno"> 181 </span>annotatePolygons :: (Polygon -&gt; SVG) -&gt; SVG -&gt; SVG
<span class="lineno"> 182 </span><span class="decl"><span class="nottickedoff">annotatePolygons fn svg = mkGroup</span>
<span class="lineno"> 183 </span><span class="spaces"> </span><span class="nottickedoff">[ fn poly &amp; drawAttributes .~ attr</span>
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">| (attr, poly) &lt;- toShapes 0.001 svg</span>
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
<span class="lineno"> 58 </span>{-# INLINE morph #-}
<span class="lineno"> 59 </span>morph :: Morph -&gt; SVG -&gt; SVG -&gt; Double -&gt; SVG
<span class="lineno"> 60 </span><span class="decl"><span class="istickedoff">morph Morph{..} src dst = \t -&gt;</span>
<span class="lineno"> 61 </span><span class="spaces"> </span><span class="istickedoff">case <span class="nottickedoff">t</span> of</span>
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="istickedoff">-- 0 -&gt; lowerTransformations src</span>
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="istickedoff">-- 1 -&gt; lowerTransformations dst</span>
<span class="lineno"> 64 </span><span class="spaces"> </span><span class="istickedoff">_ -&gt; mkGroup</span>
<span class="lineno"> 65 </span><span class="spaces"> </span><span class="istickedoff">[ render (genPoints t)</span>
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="istickedoff">&amp; drawAttributes .~ genAttrs <span class="nottickedoff">t</span></span>
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="istickedoff">| (genAttrs, genPoints) &lt;- gens</span>
<span class="lineno"> 68 </span><span class="spaces"> </span><span class="istickedoff">]</span>
<span class="lineno"> 69 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="istickedoff">render p = mkLinePathClosed</span>
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="istickedoff">[ (x,y) | V2 x y &lt;- map (fmap realToFrac) $ V.toList $ polygonPoints p ]</span>
<span class="lineno"> 72 </span><span class="spaces"> </span><span class="istickedoff">srcShapes = toShapes morphTolerance src</span>
<span class="lineno"> 73 </span><span class="spaces"> </span><span class="istickedoff">dstShapes = toShapes morphTolerance dst</span>
<span class="lineno"> 74 </span><span class="spaces"> </span><span class="istickedoff">pairs = morphObjectCorrespondence srcShapes dstShapes</span>
<span class="lineno"> 75 </span><span class="spaces"> </span><span class="istickedoff">gens =</span>
<span class="lineno"> 76 </span><span class="spaces"> </span><span class="istickedoff">[ (interpolateAttrs <span class="nottickedoff">morphColorComponents</span> srcAttr <span class="nottickedoff">dstAttr</span>, morphTrajectory arranged)</span>
<span class="lineno"> 77 </span><span class="spaces"> </span><span class="istickedoff">| ((srcAttr, srcPoly'), (dstAttr, dstPoly')) &lt;- pairs</span>
<span class="lineno"> 78 </span><span class="spaces"> </span><span class="istickedoff">, let arranged = morphPointCorrespondence srcPoly' dstPoly'</span>
<span class="lineno"> 79 </span><span class="spaces"> </span><span class="istickedoff">]</span></span>
<span class="lineno"> 80 </span>
<span class="lineno"> 81 </span>normalizePolygons :: (Real a, Fractional a) =&gt; APolygon a -&gt; APolygon a -&gt; (APolygon a, APolygon a)
<span class="lineno"> 82 </span><span class="decl"><span class="istickedoff">normalizePolygons src dst =</span>
<span class="lineno"> 83 </span><span class="spaces"> </span><span class="istickedoff">(pAddPoints (max 0 $ dstN-srcN) src</span>
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="istickedoff">,pAddPoints (max 0 $ srcN-dstN) dst)</span>
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="istickedoff">srcN = pSize src</span>
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="istickedoff">dstN = pSize dst</span></span>
<span class="lineno"> 88 </span>
<span class="lineno"> 89 </span>interpolateAttrs :: ColorComponents -&gt; DrawAttributes -&gt; DrawAttributes -&gt; Double -&gt; DrawAttributes
<span class="lineno"> 90 </span><span class="decl"><span class="istickedoff">interpolateAttrs colorComps src dst t =</span>
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="istickedoff">src &amp; fillColor .~ (<span class="nottickedoff">interpColor</span> &lt;$&gt; src^.fillColor &lt;*&gt; <span class="nottickedoff">dst^.fillColor</span>)</span>
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="istickedoff">&amp; strokeColor .~ (<span class="nottickedoff">interpColor</span> &lt;$&gt; src^.strokeColor &lt;*&gt; <span class="nottickedoff">dst^.strokeColor</span>)</span>
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="istickedoff">&amp; fillOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.fillOpacity &lt;*&gt; <span class="nottickedoff">dst^.fillOpacity</span>)</span>
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="istickedoff">&amp; groupOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.groupOpacity &lt;*&gt; <span class="nottickedoff">dst^.groupOpacity</span>)</span>
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="istickedoff">&amp; strokeOpacity .~ (<span class="nottickedoff">interpOpacity</span> &lt;$&gt; src^.strokeOpacity &lt;*&gt; <span class="nottickedoff">dst^.strokeOpacity</span>)</span>
<span class="lineno"> 96 </span><span class="spaces"> </span><span class="istickedoff">where</span>
<span class="lineno"> 97 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpColor (ColorRef a) (ColorRef b) =</span></span>
<span class="lineno"> 98 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">ColorRef $ interpolateRGBA8 colorComps a b t</span></span>
<span class="lineno"> 99 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">-- interpolateColor (ColorRef a) FillNone = ColorRef a</span></span>
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpColor a _ = a</span></span>
<span class="lineno"> 101 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">interpOpacity a b = realToFrac (fromToS (realToFrac a) (realToFrac b) t)</span></span></span>
<span class="lineno"> 102 </span>
<span class="lineno"> 103 </span>genesisObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 104 </span><span class="decl"><span class="nottickedoff">genesisObjectCorrespondence left right =</span>
<span class="lineno"> 105 </span><span class="spaces"> </span><span class="nottickedoff">case (left, right) of</span>
<span class="lineno"> 106 </span><span class="spaces"> </span><span class="nottickedoff">([] , []) -&gt; []</span>
<span class="lineno"> 107 </span><span class="spaces"> </span><span class="nottickedoff">([], (y1,y2):ys) -&gt;</span>
<span class="lineno"> 108 </span><span class="spaces"> </span><span class="nottickedoff">((y1,y2), (y1, emptyFrom y2 y2)) : genesisObjectCorrespondence [] ys</span>
<span class="lineno"> 109 </span><span class="spaces"> </span><span class="nottickedoff">((x1,x2):xs, []) -&gt;</span>
<span class="lineno"> 110 </span><span class="spaces"> </span><span class="nottickedoff">((x1,x2), (x1, emptyFrom x2 x2)) : genesisObjectCorrespondence xs []</span>
<span class="lineno"> 111 </span><span class="spaces"> </span><span class="nottickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 112 </span><span class="spaces"> </span><span class="nottickedoff">(x,y) : genesisObjectCorrespondence xs ys</span>
<span class="lineno"> 113 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 114 </span><span class="spaces"> </span><span class="nottickedoff">emptyFrom a b = mkPolygon $ V.map (const $ pCentroid a) (polygonPoints b)</span></span>
<span class="lineno"> 115 </span>
<span class="lineno"> 116 </span>dupObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 117 </span><span class="decl"><span class="nottickedoff">dupObjectCorrespondence left right =</span>
<span class="lineno"> 118 </span><span class="spaces"> </span><span class="nottickedoff">case (left, right) of</span>
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">(_, []) -&gt; []</span>
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">([], _) -&gt; []</span>
<span class="lineno"> 121 </span><span class="spaces"> </span><span class="nottickedoff">([x], [y]) -&gt;</span>
<span class="lineno"> 122 </span><span class="spaces"> </span><span class="nottickedoff">[(x,y)]</span>
<span class="lineno"> 123 </span><span class="spaces"> </span><span class="nottickedoff">([(x1,x2)], yShapes) -&gt;</span>
<span class="lineno"> 124 </span><span class="spaces"> </span><span class="nottickedoff">let x2s = replicate (length yShapes) x2</span>
<span class="lineno"> 125 </span><span class="spaces"> </span><span class="nottickedoff">in dupObjectCorrespondence (map (x1,) x2s) yShapes</span>
<span class="lineno"> 126 </span><span class="spaces"> </span><span class="nottickedoff">(xShapes, [(y1,y2)]) -&gt;</span>
<span class="lineno"> 127 </span><span class="spaces"> </span><span class="nottickedoff">let y2s = replicate (length xShapes) y2</span>
<span class="lineno"> 128 </span><span class="spaces"> </span><span class="nottickedoff">in dupObjectCorrespondence xShapes (map (y1,) y2s)</span>
<span class="lineno"> 129 </span><span class="spaces"> </span><span class="nottickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 130 </span><span class="spaces"> </span><span class="nottickedoff">(x, y) : dupObjectCorrespondence xs ys</span></span>
<span class="lineno"> 131 </span>
<span class="lineno"> 132 </span>splitObjectCorrespondence :: ObjectCorrespondence
<span class="lineno"> 133 </span>-- splitObjectCorrespondence = dupObjectCorrespondence
<span class="lineno"> 134 </span><span class="decl"><span class="istickedoff">splitObjectCorrespondence left right =</span>
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="istickedoff">case (left, right) of</span>
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="istickedoff">(_, []) -&gt; <span class="nottickedoff">[]</span></span>
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="istickedoff">([], _) -&gt; <span class="nottickedoff">[]</span></span>
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="istickedoff">([x], [y]) -&gt;</span>
<span class="lineno"> 139 </span><span class="spaces"> </span><span class="istickedoff">[(x,y)]</span>
<span class="lineno"> 140 </span><span class="spaces"> </span><span class="istickedoff">([(x1,x2)], yShapes) -&gt;</span>
<span class="lineno"> 141 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">let x2s = splitPolygon (length yShapes) x2</span></span>
<span class="lineno"> 142 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">in splitObjectCorrespondence (map (x1,) x2s) yShapes</span></span>
<span class="lineno"> 143 </span><span class="spaces"> </span><span class="istickedoff">(xShapes, [(y1,y2)]) -&gt;</span>
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">let y2s = splitPolygon (length xShapes) y2</span></span>
<span class="lineno"> 145 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">in splitObjectCorrespondence xShapes (map (y1,) y2s)</span></span>
<span class="lineno"> 146 </span><span class="spaces"> </span><span class="istickedoff">(x:xs, y:ys) -&gt;</span>
<span class="lineno"> 147 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">(x,y) : splitObjectCorrespondence xs ys</span></span></span>
<span class="lineno"> 148 </span>
<span class="lineno"> 149 </span>splitPolygon :: Int -&gt; Polygon -&gt; [Polygon]
<span class="lineno"> 150 </span><span class="decl"><span class="nottickedoff">splitPolygon 1 p = [p]</span>
<span class="lineno"> 151 </span><span class="spaces"></span><span class="nottickedoff">splitPolygon n p =</span>
<span class="lineno"> 152 </span><span class="spaces"> </span><span class="nottickedoff">let (a,b) = pCutEqual p</span>
<span class="lineno"> 153 </span><span class="spaces"> </span><span class="nottickedoff">in splitPolygon (n`div`2) a ++ splitPolygon ((n+1)`div`2) b</span></span>
<span class="lineno"> 154 </span>
<span class="lineno"> 155 </span>-- joinPairs :: Correspondence -&gt; [(DrawAttributes, PolyShape)] -&gt; [(DrawAttributes, PolyShape)]
<span class="lineno"> 156 </span>-- -&gt; [(DrawAttributes, DrawAttributes, [(RPoint, RPoint)])]
<span class="lineno"> 157 </span>-- joinPairs _ _ [] = []
<span class="lineno"> 158 </span>-- joinPairs _ [] _ = []
<span class="lineno"> 159 </span>-- joinPairs corr [(x1,x2)] [(y1,y2)] =
<span class="lineno"> 160 </span>-- [(x1,y1, corr x2 y2)]
<span class="lineno"> 161 </span>-- joinPairs corr [(x1,x2)] yShapes =
<span class="lineno"> 162 </span>-- let x2s = splitPolyShape 0.001 (length yShapes) x2
<span class="lineno"> 163 </span>-- in joinPairs corr (map (x1,) x2s) yShapes
<span class="lineno"> 164 </span>-- joinPairs corr xShapes [(y1,y2)] =
<span class="lineno"> 165 </span>-- let y2s = reverse $ splitPolyShape 0.001 (length xShapes) y2
<span class="lineno"> 166 </span>-- in joinPairs corr xShapes (map (y1,) y2s)
<span class="lineno"> 167 </span>-- joinPairs corr ((x1,x2):xs) ((y1,y2):ys) =
<span class="lineno"> 168 </span>-- (x1,y1, corr x2 y2) : joinPairs corr xs ys
<span class="lineno"> 169 </span>-- joinPairs _ _ _ = []
<span class="lineno"> 170 </span>
<span class="lineno"> 171 </span>-- FIXME: sort by size, smallest to largest
<span class="lineno"> 172 </span>toShapes :: Double -&gt; SVG -&gt; [(DrawAttributes, Polygon)]
<span class="lineno"> 173 </span><span class="decl"><span class="istickedoff">toShapes tol src =</span>
<span class="lineno"> 174 </span><span class="spaces"> </span><span class="istickedoff">[ (attrs, plToPolygon tol shape)</span>
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="istickedoff">| (_, attrs, glyph) &lt;- svgGlyphs $ lowerTransformations $ pathify src</span>
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="istickedoff">, shape &lt;- map mergePolyShapeHoles $ plGroupShapes $ svgToPolyShapes glyph</span>
<span class="lineno"> 177 </span><span class="spaces"> </span><span class="istickedoff">]</span></span>
<span class="lineno"> 178 </span>
<span class="lineno"> 179 </span>unsafeSVGToPolygon :: Double -&gt; SVG -&gt; Polygon
<span class="lineno"> 180 </span><span class="decl"><span class="nottickedoff">unsafeSVGToPolygon tol src = snd $ head $ toShapes tol src</span></span>
<span class="lineno"> 181 </span>
<span class="lineno"> 182 </span>annotatePolygons :: (Polygon -&gt; SVG) -&gt; SVG -&gt; SVG
<span class="lineno"> 183 </span><span class="decl"><span class="nottickedoff">annotatePolygons fn svg = mkGroup</span>
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">[ fn poly &amp; drawAttributes .~ attr</span>
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">| (attr, poly) &lt;- toShapes 0.001 svg</span>
<span class="lineno"> 186 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
</pre>
</body>

View file

@ -21,56 +21,61 @@ span.spaces { background: white }
<span class="lineno"> 2 </span> ( linear, rawLinear
<span class="lineno"> 3 </span> , linearCorrespondence
<span class="lineno"> 4 </span> , closestLinearCorrespondence
<span class="lineno"> 5 </span> , linearTrajectory
<span class="lineno"> 6 </span> ) where
<span class="lineno"> 7 </span>
<span class="lineno"> 8 </span>import Data.Hashable
<span class="lineno"> 9 </span>import qualified Data.Vector as V
<span class="lineno"> 10 </span>import Linear.Vector
<span class="lineno"> 11 </span>import Reanimate.ColorComponents
<span class="lineno"> 12 </span>import Reanimate.Math.Common
<span class="lineno"> 13 </span>import Reanimate.Math.Polygon
<span class="lineno"> 14 </span>import Reanimate.Morph.Cache
<span class="lineno"> 15 </span>import Reanimate.Morph.Common
<span class="lineno"> 16 </span>
<span class="lineno"> 17 </span>linear :: Morph
<span class="lineno"> 18 </span><span class="decl"><span class="nottickedoff">linear = rawLinear</span>
<span class="lineno"> 19 </span><span class="spaces"> </span><span class="nottickedoff">{ morphPointCorrespondence =</span>
<span class="lineno"> 20 </span><span class="spaces"> </span><span class="nottickedoff">cachePointCorrespondence (hash (&quot;closest&quot;::String))</span>
<span class="lineno"> 21 </span><span class="spaces"> </span><span class="nottickedoff">closestLinearCorrespondence }</span></span>
<span class="lineno"> 22 </span>
<span class="lineno"> 23 </span>rawLinear :: Morph
<span class="lineno"> 24 </span><span class="decl"><span class="istickedoff">rawLinear = Morph</span>
<span class="lineno"> 25 </span><span class="spaces"> </span><span class="istickedoff">{ morphTolerance = 0.001</span>
<span class="lineno"> 26 </span><span class="spaces"> </span><span class="istickedoff">, morphColorComponents = <span class="nottickedoff">labComponents</span></span>
<span class="lineno"> 27 </span><span class="spaces"> </span><span class="istickedoff">, morphPointCorrespondence = linearCorrespondence</span>
<span class="lineno"> 28 </span><span class="spaces"> </span><span class="istickedoff">, morphTrajectory = linearTrajectory</span>
<span class="lineno"> 29 </span><span class="spaces"> </span><span class="istickedoff">, morphObjectCorrespondence = splitObjectCorrespondence }</span></span>
<span class="lineno"> 30 </span>
<span class="lineno"> 31 </span>linearCorrespondence :: PointCorrespondence
<span class="lineno"> 32 </span><span class="decl"><span class="istickedoff">linearCorrespondence = normalizePolygons</span></span>
<span class="lineno"> 33 </span>
<span class="lineno"> 34 </span>closestLinearCorrespondence :: PointCorrespondence
<span class="lineno"> 35 </span><span class="decl"><span class="nottickedoff">closestLinearCorrespondence src' dst' =</span>
<span class="lineno"> 36 </span><span class="spaces"> </span><span class="nottickedoff">(src, worker dst (score dst) options)</span>
<span class="lineno"> 37 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
<span class="lineno"> 38 </span><span class="spaces"> </span><span class="nottickedoff">(src, dst) = normalizePolygons src' dst'</span>
<span class="lineno"> 39 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP _bestPScore [] = bestP</span>
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP bestPScore (x:xs) =</span>
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">let newScore = score x in</span>
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">if newScore &lt; bestPScore</span>
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">then worker x newScore xs</span>
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">else worker bestP bestPScore xs</span>
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">options = pCycles dst</span>
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">score p = sum</span>
<span class="lineno"> 47 </span><span class="spaces"> </span><span class="nottickedoff">[ approxDist (pAccess src n) (pAccess p n)</span>
<span class="lineno"> 48 </span><span class="spaces"> </span><span class="nottickedoff">| n &lt;- [0 .. pSize src-1] ]</span></span>
<span class="lineno"> 49 </span>
<span class="lineno"> 50 </span>linearTrajectory :: Trajectory
<span class="lineno"> 51 </span><span class="decl"><span class="istickedoff">linearTrajectory (src,dst)</span>
<span class="lineno"> 52 </span><span class="spaces"> </span><span class="istickedoff">| <span class="tickonlytrue">pSize src == pSize dst</span> = \t -&gt; mkPolygon $</span>
<span class="lineno"> 53 </span><span class="spaces"> </span><span class="istickedoff">V.zipWith (lerp $ realToFrac t) (polygonPoints dst) (polygonPoints src)</span>
<span class="lineno"> 54 </span><span class="spaces"> </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span> = <span class="nottickedoff">error $ &quot;Invalid lengths: &quot; ++ show (pSize src, pSize dst)</span></span></span>
<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 (&quot;closest&quot;::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) =&gt; APolygon a -&gt; APolygon a -&gt; (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 &lt; 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 &lt;- [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 -&gt; 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 $ &quot;Invalid lengths: &quot; ++ show (pSize src, pSize dst)</span></span></span>
</pre>
</body>