mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-15 10:02:45 +00:00
Deploying to gh-pages from @ 0d4a5801de 🚀
This commit is contained in:
parent
b86ff4e028
commit
c0c7ac853d
11 changed files with 1168 additions and 1089 deletions
14
haddock.txt
14
haddock.txt
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "schemaVersion": 1, "label": "api docs", "message": "41%", "color": "success" }
|
||||
{ "schemaVersion": 1, "label": "api docs", "message": "53%", "color": "success" }
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "schemaVersion": 1, "label": "api tests", "message": "31%", "color": "success" }
|
||||
{ "schemaVersion": 1, "label": "api tests", "message": "30%", "color": "success" }
|
||||
|
|
|
|||
|
|
@ -25,9 +25,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td> <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> <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> <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> <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> <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> <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> <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> <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> <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">- </td><td>0/0</td><td width=100> </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> 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>
|
||||
|
|
|
|||
|
|
@ -22,9 +22,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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">- </td><td>0/0</td><td width=100> </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> 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>
|
||||
|
|
|
|||
|
|
@ -31,9 +31,6 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td> <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> <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> <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> <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> <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> <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> <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> <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> <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> 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>
|
||||
|
|
|
|||
|
|
@ -34,18 +34,15 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
|||
<td> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> 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>
|
||||
|
|
|
|||
|
|
@ -32,164 +32,177 @@ span.spaces { background: white }
|
|||
<span class="lineno"> 13 </span> , area2X -- :: Fractional a => V2 a -> V2 a -> V2 a -> a
|
||||
<span class="lineno"> 14 </span> , epsilon -- :: Fractional a => a
|
||||
<span class="lineno"> 15 </span> , epsEq -- :: (Ord a, Fractional a) => a -> a -> Bool
|
||||
<span class="lineno"> 16 </span> , isLeftTurn -- :: (Fractional a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 17 </span> , isLeftTurnOrLinear -- :: (Fractional a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 18 </span> , isRightTurn -- :: (Fractional a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 19 </span> , isRightTurnOrLinear -- :: (Fractional a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 20 </span> , direction -- :: Fractional a => V2 a -> V2 a -> V2 a -> a
|
||||
<span class="lineno"> 16 </span> , isLeftTurn -- :: (Num a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 17 </span> , isLeftTurnOrLinear -- :: (Num a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 18 </span> , isRightTurn -- :: (Num a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 19 </span> , isRightTurnOrLinear -- :: (Num a, Ord a) => V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 20 </span> , direction -- :: Num a => V2 a -> V2 a -> V2 a -> a
|
||||
<span class="lineno"> 21 </span> , isInside -- :: (Fractional a, Ord a) => V2 a -> V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 22 </span> , barycentricCoords -- :: Fractional a => V2 a -> V2 a -> V2 a -> V2 a -> (a, a, a)
|
||||
<span class="lineno"> 23 </span> , rayIntersect -- :: (Fractional a, Ord a) => (V2 a,V2 a) -> (V2 a,V2 a) -> Maybe (V2 a)
|
||||
<span class="lineno"> 24 </span> , isBetween -- :: (Ord a, Fractional a) => V2 a -> (V2 a, V2 a) -> Bool
|
||||
<span class="lineno"> 25 </span> , lineIntersect -- :: (Ord a, Fractional a) => (V2 a, V2 a) -> (V2 a, V2 a) -> Maybe (V2 a)
|
||||
<span class="lineno"> 26 </span> , distSquared -- :: (Fractional a) => V2 a -> V2 a -> a
|
||||
<span class="lineno"> 27 </span> , approxDist -- :: (Real a, Fractional a) => V2 a -> V2 a -> a
|
||||
<span class="lineno"> 28 </span> , distance' -- :: (Real a, Fractional a) => V2 a -> V2 a -> Double
|
||||
<span class="lineno"> 29 </span> , triangleAngles -- :: V2 Double -> V2 Double -> V2 Double -> (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 -> 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 -> Int -> 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 -> Int -> 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 -> 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) -> 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 -> V2 b) -> Ring a -> 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 -> (Int, Int) -> (Int,Int) -> 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) => V2 a -> V2 a -> V2 a -> V2 a -> Bool
|
||||
<span class="lineno"> 23 </span> , barycentricCoords -- :: Fractional a => V2 a -> V2 a -> V2 a -> V2 a -> (a, a, a)
|
||||
<span class="lineno"> 24 </span> , rayIntersect -- :: (Fractional a, Ord a) => (V2 a,V2 a) -> (V2 a,V2 a) -> Maybe (V2 a)
|
||||
<span class="lineno"> 25 </span> , isBetween -- :: (Ord a, Fractional a) => V2 a -> (V2 a, V2 a) -> Bool
|
||||
<span class="lineno"> 26 </span> , lineIntersect -- :: (Ord a, Fractional a) => (V2 a, V2 a) -> (V2 a, V2 a) -> Maybe (V2 a)
|
||||
<span class="lineno"> 27 </span> , distSquared -- :: (Fractional a) => V2 a -> V2 a -> a
|
||||
<span class="lineno"> 28 </span> , approxDist -- :: (Real a, Fractional a) => V2 a -> V2 a -> a
|
||||
<span class="lineno"> 29 </span> , distance' -- :: (Real a, Fractional a) => V2 a -> V2 a -> Double
|
||||
<span class="lineno"> 30 </span> , triangleAngles -- :: V2 Double -> V2 Double -> V2 Double -> (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 -> 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 -> Int -> 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 -> Int -> 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 -> 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) -> 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 -> V2 b) -> Ring a -> 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 -> (Int, Int) -> (Int,Int) -> 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 => V2 a -> V2 a -> V2 a -> 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 => V2 a -> V2 a -> V2 a -> 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 => 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) => a -> a -> Bool
|
||||
<span class="lineno"> 78 </span><span class="decl"><span class="nottickedoff">epsEq a b = abs (a-b) < 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) => V2 a -> V2 a -> V2 a -> 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 -> True</span>
|
||||
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="nottickedoff">EQ -> False -- colnear</span>
|
||||
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="nottickedoff">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) => V2 a -> V2 a -> V2 a -> 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 -> True</span>
|
||||
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="nottickedoff">EQ -> True -- colnear</span>
|
||||
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="nottickedoff">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) => V2 a -> V2 a -> V2 a -> 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) => V2 a -> V2 a -> V2 a -> 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 => V2 a -> V2 a -> V2 a -> 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) => V2 a -> V2 a -> V2 a -> V2 a -> 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 >= 0 && s <= 1 && t >= 0 && t <= 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 => V2 a -> V2 a -> V2 a -> V2 a -> (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) => (V2 a,V2 a) -> (V2 a,V2 a) -> 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 => V2 a -> V2 a -> V2 a -> 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 => V2 a -> V2 a -> V2 a -> 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 => 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) => a -> a -> Bool
|
||||
<span class="lineno"> 79 </span><span class="decl"><span class="nottickedoff">epsEq a b = abs (a-b) < epsilon</span></span>
|
||||
<span class="lineno"> 80 </span>
|
||||
<span class="lineno"> 81 </span>compareEpsZero :: (Ord a, Fractional a) => a -> 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 < 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) => V2 a -> V2 a -> V2 a -> 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 -> True</span>
|
||||
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">EQ -> False -- colinear</span>
|
||||
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="nottickedoff">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) => V2 a -> V2 a -> V2 a -> 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 -> True</span>
|
||||
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="nottickedoff">EQ -> True -- colinear</span>
|
||||
<span class="lineno"> 101 </span><span class="spaces"> </span><span class="nottickedoff">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) => V2 a -> V2 a -> V2 a -> 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) => V2 a -> V2 a -> V2 a -> 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 => V2 a -> V2 a -> V2 a -> 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) => V2 a -> V2 a -> V2 a -> V2 a -> 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 >= 0 && s <= 1 && t >= 0 && t <= 1 && i >= 0 && i <= 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) => V2 a -> V2 a -> V2 a -> V2 a -> 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 > 0 && s < 1 && t > 0 && t < 1 && i > 0 && i < 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 => V2 a -> V2 a -> V2 a -> V2 a -> (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) => V2 a -> (V2 a, V2 a) -> 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 > y) /= (y2 > y) || y == y1 || y == y2) && -- y is between y1 and y2</span>
|
||||
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="nottickedoff">((x1 > x) /= (x2 > 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) => (V2 a, V2 a) -> (V2 a, V2 a) -> 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 && isBetween u b -> Just u</span>
|
||||
<span class="lineno"> 152 </span><span class="spaces"> </span><span class="nottickedoff">_ -> Nothing</span></span>
|
||||
<span class="lineno"> 153 </span>
|
||||
<span class="lineno"> 154 </span>-- circleIntersect :: (Ord a, Fractional a) => (V2 a, V2 a) -> (V2 a, V2 a) -> [V2 a]
|
||||
<span class="lineno"> 155 </span>
|
||||
<span class="lineno"> 156 </span>distSquared :: (Fractional a) => V2 a -> V2 a -> 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) => (V2 a,V2 a) -> (V2 a,V2 a) -> 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) => V2 a -> (V2 a, V2 a) -> 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 > y) /= (y2 > y) || y == y1 || y == y2) && -- y is between y1 and y2</span>
|
||||
<span class="lineno"> 157 </span><span class="spaces"> </span><span class="nottickedoff">((x1 > x) /= (x2 > x) || x == x1 || x == x2)</span></span>
|
||||
<span class="lineno"> 158 </span>
|
||||
<span class="lineno"> 159 </span>approxDist :: (Real a, Fractional a) => V2 a -> V2 a -> 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) => V2 a -> V2 a -> 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 -> V2 Double -> V2 Double -> (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) => (V2 a, V2 a) -> (V2 a, V2 a) -> 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 && isBetween u b -> Just u</span>
|
||||
<span class="lineno"> 165 </span><span class="spaces"> </span><span class="nottickedoff">_ -> Nothing</span></span>
|
||||
<span class="lineno"> 166 </span>
|
||||
<span class="lineno"> 167 </span>-- circleIntersect :: (Ord a, Fractional a) => (V2 a, V2 a) -> (V2 a, V2 a) -> [V2 a]
|
||||
<span class="lineno"> 168 </span>
|
||||
<span class="lineno"> 169 </span>distSquared :: (Num a) => V2 a -> V2 a -> 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) => V2 a -> V2 a -> 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) => V2 a -> V2 a -> 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 -> V2 Double -> V2 Double -> (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
|
|
@ -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 -> SVG -> SVG -> Double -> SVG
|
||||
<span class="lineno"> 59 </span><span class="decl"><span class="istickedoff">morph Morph{..} src dst = \t -></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 -> lowerTransformations src</span>
|
||||
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="istickedoff">-- 1 -> lowerTransformations dst</span>
|
||||
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="istickedoff">_ -> 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">& drawAttributes .~ genAttrs <span class="nottickedoff">t</span></span>
|
||||
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="istickedoff">| (genAttrs, genPoints) <- 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 <- 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')) <- 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 -> Polygon -> (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 -> DrawAttributes -> DrawAttributes -> Double -> 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 & fillColor .~ (<span class="nottickedoff">interpColor</span> <$> src^.fillColor <*> <span class="nottickedoff">dst^.fillColor</span>)</span>
|
||||
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="istickedoff">& strokeColor .~ (<span class="nottickedoff">interpColor</span> <$> src^.strokeColor <*> <span class="nottickedoff">dst^.strokeColor</span>)</span>
|
||||
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="istickedoff">& fillOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.fillOpacity <*> <span class="nottickedoff">dst^.fillOpacity</span>)</span>
|
||||
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="istickedoff">& groupOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.groupOpacity <*> <span class="nottickedoff">dst^.groupOpacity</span>)</span>
|
||||
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="istickedoff">& strokeOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.strokeOpacity <*> <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">([] , []) -> []</span>
|
||||
<span class="lineno"> 106 </span><span class="spaces"> </span><span class="nottickedoff">([], (y1,y2):ys) -></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, []) -></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) -></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">(_, []) -> []</span>
|
||||
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">([], _) -> []</span>
|
||||
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">([x], [y]) -></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) -></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)]) -></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) -></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">(_, []) -> <span class="nottickedoff">[]</span></span>
|
||||
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="istickedoff">([], _) -> <span class="nottickedoff">[]</span></span>
|
||||
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="istickedoff">([x], [y]) -></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) -></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)]) -></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) -></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 -> Polygon -> [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 -> [(DrawAttributes, PolyShape)] -> [(DrawAttributes, PolyShape)]
|
||||
<span class="lineno"> 155 </span>-- -> [(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 -> SVG -> [(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) <- svgGlyphs $ lowerTransformations $ pathify src</span>
|
||||
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="istickedoff">, shape <- 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 -> SVG -> 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 -> SVG) -> SVG -> 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 & drawAttributes .~ attr</span>
|
||||
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">| (attr, poly) <- 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 -> SVG -> SVG -> Double -> SVG
|
||||
<span class="lineno"> 60 </span><span class="decl"><span class="istickedoff">morph Morph{..} src dst = \t -></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 -> lowerTransformations src</span>
|
||||
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="istickedoff">-- 1 -> lowerTransformations dst</span>
|
||||
<span class="lineno"> 64 </span><span class="spaces"> </span><span class="istickedoff">_ -> 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">& drawAttributes .~ genAttrs <span class="nottickedoff">t</span></span>
|
||||
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="istickedoff">| (genAttrs, genPoints) <- 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 <- 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')) <- 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) => APolygon a -> APolygon a -> (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 -> DrawAttributes -> DrawAttributes -> Double -> 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 & fillColor .~ (<span class="nottickedoff">interpColor</span> <$> src^.fillColor <*> <span class="nottickedoff">dst^.fillColor</span>)</span>
|
||||
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="istickedoff">& strokeColor .~ (<span class="nottickedoff">interpColor</span> <$> src^.strokeColor <*> <span class="nottickedoff">dst^.strokeColor</span>)</span>
|
||||
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="istickedoff">& fillOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.fillOpacity <*> <span class="nottickedoff">dst^.fillOpacity</span>)</span>
|
||||
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="istickedoff">& groupOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.groupOpacity <*> <span class="nottickedoff">dst^.groupOpacity</span>)</span>
|
||||
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="istickedoff">& strokeOpacity .~ (<span class="nottickedoff">interpOpacity</span> <$> src^.strokeOpacity <*> <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">([] , []) -> []</span>
|
||||
<span class="lineno"> 107 </span><span class="spaces"> </span><span class="nottickedoff">([], (y1,y2):ys) -></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, []) -></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) -></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">(_, []) -> []</span>
|
||||
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="nottickedoff">([], _) -> []</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">[(x,y)]</span>
|
||||
<span class="lineno"> 123 </span><span class="spaces"> </span><span class="nottickedoff">([(x1,x2)], yShapes) -></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)]) -></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) -></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">(_, []) -> <span class="nottickedoff">[]</span></span>
|
||||
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="istickedoff">([], _) -> <span class="nottickedoff">[]</span></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">[(x,y)]</span>
|
||||
<span class="lineno"> 140 </span><span class="spaces"> </span><span class="istickedoff">([(x1,x2)], yShapes) -></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)]) -></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) -></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 -> Polygon -> [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 -> [(DrawAttributes, PolyShape)] -> [(DrawAttributes, PolyShape)]
|
||||
<span class="lineno"> 156 </span>-- -> [(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 -> SVG -> [(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) <- svgGlyphs $ lowerTransformations $ pathify src</span>
|
||||
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="istickedoff">, shape <- 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 -> SVG -> 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 -> SVG) -> SVG -> 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 & drawAttributes .~ attr</span>
|
||||
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">| (attr, poly) <- toShapes 0.001 svg</span>
|
||||
<span class="lineno"> 186 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
|
||||
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -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 ("closest"::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 < 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 <- [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 -> 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 $ "Invalid lengths: " ++ 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 ("closest"::String))</span>
|
||||
<span class="lineno"> 22 </span><span class="spaces"> </span><span class="nottickedoff">closestLinearCorrespondence }</span></span>
|
||||
<span class="lineno"> 23 </span>
|
||||
<span class="lineno"> 24 </span>rawLinear :: Morph
|
||||
<span class="lineno"> 25 </span><span class="decl"><span class="istickedoff">rawLinear = Morph</span>
|
||||
<span class="lineno"> 26 </span><span class="spaces"> </span><span class="istickedoff">{ morphTolerance = 0.001</span>
|
||||
<span class="lineno"> 27 </span><span class="spaces"> </span><span class="istickedoff">, morphColorComponents = <span class="nottickedoff">labComponents</span></span>
|
||||
<span class="lineno"> 28 </span><span class="spaces"> </span><span class="istickedoff">, morphPointCorrespondence = linearCorrespondence</span>
|
||||
<span class="lineno"> 29 </span><span class="spaces"> </span><span class="istickedoff">, morphTrajectory = linearTrajectory</span>
|
||||
<span class="lineno"> 30 </span><span class="spaces"> </span><span class="istickedoff">, morphObjectCorrespondence = splitObjectCorrespondence }</span></span>
|
||||
<span class="lineno"> 31 </span>
|
||||
<span class="lineno"> 32 </span>linearCorrespondence :: PointCorrespondence
|
||||
<span class="lineno"> 33 </span><span class="decl"><span class="istickedoff">linearCorrespondence = normalizePolygons</span></span>
|
||||
<span class="lineno"> 34 </span>
|
||||
<span class="lineno"> 35 </span>closestLinearCorrespondence :: PointCorrespondence
|
||||
<span class="lineno"> 36 </span><span class="decl"><span class="nottickedoff">closestLinearCorrespondence = closestLinearCorrespondenceA</span></span>
|
||||
<span class="lineno"> 37 </span>
|
||||
<span class="lineno"> 38 </span>closestLinearCorrespondenceA :: (Real a, Fractional a) => APolygon a -> APolygon a -> (APolygon a, APolygon a)
|
||||
<span class="lineno"> 39 </span><span class="decl"><span class="nottickedoff">closestLinearCorrespondenceA src' dst' =</span>
|
||||
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">(src, worker dst (score dst) options)</span>
|
||||
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">(src, dst) = normalizePolygons src' dst'</span>
|
||||
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP _bestPScore [] = bestP</span>
|
||||
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">worker bestP bestPScore (x:xs) =</span>
|
||||
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">let newScore = score x in</span>
|
||||
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">if newScore < bestPScore</span>
|
||||
<span class="lineno"> 47 </span><span class="spaces"> </span><span class="nottickedoff">then worker x newScore xs</span>
|
||||
<span class="lineno"> 48 </span><span class="spaces"> </span><span class="nottickedoff">else worker bestP bestPScore xs</span>
|
||||
<span class="lineno"> 49 </span><span class="spaces"> </span><span class="nottickedoff">options = pCycles dst</span>
|
||||
<span class="lineno"> 50 </span><span class="spaces"> </span><span class="nottickedoff">score p = sum</span>
|
||||
<span class="lineno"> 51 </span><span class="spaces"> </span><span class="nottickedoff">[ -- approxDist (pAccess src n) (pAccess p n)</span>
|
||||
<span class="lineno"> 52 </span><span class="spaces"> </span><span class="nottickedoff">distSquared (pAccess src n) (pAccess p n)</span>
|
||||
<span class="lineno"> 53 </span><span class="spaces"> </span><span class="nottickedoff">| n <- [0 .. pSize src-1] ]</span></span>
|
||||
<span class="lineno"> 54 </span>
|
||||
<span class="lineno"> 55 </span>linearTrajectory :: Trajectory
|
||||
<span class="lineno"> 56 </span><span class="decl"><span class="istickedoff">linearTrajectory (src,dst)</span>
|
||||
<span class="lineno"> 57 </span><span class="spaces"> </span><span class="istickedoff">| <span class="tickonlytrue">pSize src == pSize dst</span> = \t -> mkPolygon $</span>
|
||||
<span class="lineno"> 58 </span><span class="spaces"> </span><span class="istickedoff">V.zipWith (lerp $ realToFrac t) (polygonPoints dst) (polygonPoints src)</span>
|
||||
<span class="lineno"> 59 </span><span class="spaces"> </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span> = <span class="nottickedoff">error $ "Invalid lengths: " ++ show (pSize src, pSize dst)</span></span></span>
|
||||
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Reference in a new issue