CounterDroneBackend/coverage_report/CounterDrone.Core_Kinematics.html

246 lines
52 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE,chrome=1" />
<link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAn1BMVEUAAADCAAAAAAA3yDfUAAA3yDfUAAA8PDzr6+sAAAD4+Pg3yDeQkJDTAADt7e3V1dU3yDdCQkIAAADbMTHUAABBykHUAAA2yDY3yDfr6+vTAAB3diDR0dGYcHDUAAAjhiPSAAA3yDeuAADUAAA3yDf////OCALg9+BLzktBuzRelimzKgv87+/dNTVflSn1/PWz6rO126g5yDlYniy0KgwjJ0TyAAAAI3RSTlMABAj0WD6rJcsN7X1HzMqUJyYW+/X08+bltqSeaVRBOy0cE+citBEAAADBSURBVDjLlczXEoIwFIThJPYGiL0XiL3r+z+bBOJs9JDMuLffP8v+Gxfc6aIyDQVjQcnqnvRDEQwLJYtXpZT+YhDHKIjLbS+OUeT4TjkKi6OwOArq+yeKXD9uDqQQbcOjyCy0e6bTojZSftX+U6zUQ7OuittDu1k0WHqRFfdXQijgjKfF6ZwAikvmKD6OQjmKWUcDigkztm5FZN05nMON9ZcoinlBmTNnAUdBnRbUUbgdBZwWbkcBpwXcVsBtxfjb31j1QB5qeebOAAAAAElFTkSuQmCC" rel="icon" type="image/x-icon" />
<title>CounterDrone.Core.Algorithms.Kinematics - Coverage Report</title>
<link rel="stylesheet" type="text/css" href="report.css" />
</head><body><div class="container"><div class="containerleft">
<h1><a href="index.html" class="back">&lt;</a> Summary</h1>
<div class="card-group">
<div class="card">
<div class="card-header">Information</div>
<div class="card-body">
<div class="table">
<table>
<tr>
<th>Class:</th>
<td class="limit-width " title="CounterDrone.Core.Algorithms.Kinematics">CounterDrone.Core.Algorithms.Kinematics</td>
</tr>
<tr>
<th>Assembly:</th>
<td class="limit-width " title="CounterDrone.Core">CounterDrone.Core</td>
</tr>
<tr>
<th>File(s):</th>
<td class="overflow-wrap"><a href="#CUsersTellmeappsCounterDroneBackendsrcCounterDroneCoreAlgorithmsKinematicscs" class="navigatetohash">C:\Users\Tellme\apps\CounterDroneBackend\src\CounterDrone.Core\Algorithms\Kinematics.cs</a></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="card-group">
<div class="card">
<div class="card-header">Line coverage</div>
<div class="card-body">
<div class="large cardpercentagebar cardpercentagebar27">73%</div>
<div class="table">
<table>
<tr>
<th>Covered lines:</th>
<td class="limit-width right" title="47">47</td>
</tr>
<tr>
<th>Uncovered lines:</th>
<td class="limit-width right" title="17">17</td>
</tr>
<tr>
<th>Coverable lines:</th>
<td class="limit-width right" title="64">64</td>
</tr>
<tr>
<th>Total lines:</th>
<td class="limit-width right" title="105">105</td>
</tr>
<tr>
<th>Line coverage:</th>
<td class="limit-width right" title="47 of 64">73.4%</td>
</tr>
</table>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Branch coverage</div>
<div class="card-body">
<div class="large cardpercentagebar cardpercentagebar43">57%</div>
<div class="table">
<table>
<tr>
<th>Covered branches:</th>
<td class="limit-width right" title="12">12</td>
</tr>
<tr>
<th>Total branches:</th>
<td class="limit-width right" title="21">21</td>
</tr>
<tr>
<th>Branch coverage:</th>
<td class="limit-width right" title="12 of 21">57.1%</td>
</tr>
</table>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Method coverage</div>
<div class="card-body">
<div class="center">
<p>Feature is only available for sponsors</p>
<a class="pro-button" href="https://reportgenerator.io/pro" target="_blank">Upgrade to PRO version</a>
</div>
</div>
</div>
</div>
<h1>Metrics</h1>
<div class="table-responsive">
<table class="overview table-fixed">
<colgroup>
<col class="column-min-200" />
<col class="column105" />
<col class="column105" />
<col class="column105" />
<col class="column105" />
</colgroup>
<thead><tr><th>Method</th><th>Branch coverage <a href="https://en.wikipedia.org/wiki/Code_coverage" target="_blank"><i class="icon-info-circled"></i></a></th><th>Crap Score <a href="https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" target="_blank"><i class="icon-info-circled"></i></a></th><th>Cyclomatic complexity <a href="https://en.wikipedia.org/wiki/Cyclomatic_complexity" target="_blank"><i class="icon-info-circled"></i></a></th><th>Line coverage <a href="https://en.wikipedia.org/wiki/Code_coverage" target="_blank"><i class="icon-info-circled"></i></a></th></tr></thead>
<tbody>
<tr><td title="WindToVector(CounterDrone.Core.Models.WindDirection,System.Single)"><a href="#file0_line11" class="navigatetohash">WindToVector(...)</a></td><td>33.33%</td><td>13</td><td>9</td><td>62.5%</td></tr>
<tr><td title="CalculateLaunchAngle(System.Single,System.Single,System.Single)"><a href="#file0_line34" class="navigatetohash">CalculateLaunchAngle(...)</a></td><td>50%</td><td>4</td><td>4</td><td>100%</td></tr>
<tr><td title="ParabolicPosition(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)"><a href="#file0_line58" class="navigatetohash">ParabolicPosition(...)</a></td><td>100%</td><td>1</td><td>1</td><td>100%</td></tr>
<tr><td title="Distance2D(System.Single,System.Single,System.Single,System.Single)"><a href="#file0_line73" class="navigatetohash">Distance2D(...)</a></td><td>100%</td><td>2</td><td>1</td><td>0%</td></tr>
<tr><td title="Distance3D(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)"><a href="#file0_line81" class="navigatetohash">Distance3D(...)</a></td><td>100%</td><td>2</td><td>1</td><td>0%</td></tr>
<tr><td title="PointInPolygon(System.Single,System.Single,System.ReadOnlySpan`1&lt;System.ValueTuple`2&lt;System.Single,System.Single&gt;&gt;)"><a href="#file0_line90" class="navigatetohash">PointInPolygon(...)</a></td><td>87.5%</td><td>8</td><td>8</td><td>100%</td></tr>
</tbody>
</table>
</div>
<h1>File(s)</h1>
<h2 id="CUsersTellmeappsCounterDroneBackendsrcCounterDroneCoreAlgorithmsKinematicscs">C:\Users\Tellme\apps\CounterDroneBackend\src\CounterDrone.Core\Algorithms\Kinematics.cs</h2>
<div class="table-responsive">
<table class="lineAnalysis">
<thead><tr><th></th><th>#</th><th>Line</th><th></th><th>Line coverage</th></tr></thead>
<tbody>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line1"></a><code>1</code></td><td></td><td class="lightgray"><code>using&nbsp;System;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line2"></a><code>2</code></td><td></td><td class="lightgray"><code>using&nbsp;CounterDrone.Core.Models;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line3"></a><code>3</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line4"></a><code>4</code></td><td></td><td class="lightgray"><code>namespace&nbsp;CounterDrone.Core.Algorithms</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line5"></a><code>5</code></td><td></td><td class="lightgray"><code>{</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line6"></a><code>6</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;通用运动学&nbsp;/&nbsp;几何工具&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line7"></a><code>7</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;class&nbsp;Kinematics</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line8"></a><code>8</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line9"></a><code>9</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;风向&nbsp;&nbsp;单位速度矢量&nbsp;(X,&nbsp;0,&nbsp;Z),右手系&nbsp;Y-up&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line10"></a><code>10</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;(float&nbsp;X,&nbsp;float&nbsp;Y,&nbsp;float&nbsp;Z)&nbsp;WindToVector(WindDirection&nbsp;dir,&nbsp;float&nbsp;speed)</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line11"></a><code>11</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Partially covered (5930 visits, 3 of 9 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'orange'}}"><td class="orange">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line12"></a><code>12</code></td><td class="percentagebar percentagebar30"><i class="icon-fork"></i></td><td class="lightorange"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;angle&nbsp;=&nbsp;dir&nbsp;switch</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line13"></a><code>13</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Covered (4642 visits)" data-coverage="{'AllTestMethods': {'VC': '4642', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">4642</td><td class="rightmargin right"><a id="file0_line14"></a><code>14</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.N&nbsp;=&gt;&nbsp;0f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line15"></a><code>15</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.NE&nbsp;=&gt;&nbsp;45f,</code></td></tr>
<tr class="coverableline" title="Covered (136 visits)" data-coverage="{'AllTestMethods': {'VC': '136', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">136</td><td class="rightmargin right"><a id="file0_line16"></a><code>16</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.E&nbsp;=&gt;&nbsp;90f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line17"></a><code>17</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.SE&nbsp;=&gt;&nbsp;135f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line18"></a><code>18</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.S&nbsp;=&gt;&nbsp;180f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line19"></a><code>19</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.SW&nbsp;=&gt;&nbsp;225f,</code></td></tr>
<tr class="coverableline" title="Covered (1152 visits)" data-coverage="{'AllTestMethods': {'VC': '1152', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">1152</td><td class="rightmargin right"><a id="file0_line20"></a><code>20</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.W&nbsp;=&gt;&nbsp;270f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line21"></a><code>21</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindDirection.NW&nbsp;=&gt;&nbsp;315f,</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line22"></a><code>22</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;=&gt;&nbsp;0f,</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line23"></a><code>23</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line24"></a><code>24</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rad&nbsp;=&nbsp;angle&nbsp;*&nbsp;(float)Math.PI&nbsp;/&nbsp;180f;</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line25"></a><code>25</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((float)Math.Sin(rad)&nbsp;*&nbsp;speed,&nbsp;0,&nbsp;(float)Math.Cos(rad)&nbsp;*&nbsp;speed);</code></td></tr>
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">5930</td><td class="rightmargin right"><a id="file0_line26"></a><code>26</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line27"></a><code>27</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line28"></a><code>28</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;计算抛物线炮弹的发射角&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line29"></a><code>29</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;range&quot;&gt;水平距离&nbsp;(m)&lt;/param&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line30"></a><code>30</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;muzzleVelocity&quot;&gt;初速&nbsp;(m/s)&lt;/param&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line31"></a><code>31</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;releaseAltitude&quot;&gt;释放高度&nbsp;(m),弹道顶点必须&nbsp;&nbsp;此值&lt;/param&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line32"></a><code>32</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;发射角&nbsp;(rad),取低弹道&lt;/returns&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line33"></a><code>33</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;float&nbsp;CalculateLaunchAngle(float&nbsp;range,&nbsp;float&nbsp;muzzleVelocity,&nbsp;float&nbsp;releaseAltitude)</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line34"></a><code>34</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line35"></a><code>35</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;v2&nbsp;=&nbsp;muzzleVelocity&nbsp;*&nbsp;muzzleVelocity;</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line36"></a><code>36</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;g&nbsp;=&nbsp;9.81f;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line37"></a><code>37</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line38"></a><code>38</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1.&nbsp;射程所需角θr&nbsp;=&nbsp;arcsin(R*g/v&#178;)&nbsp;/&nbsp;2</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line39"></a><code>39</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rangeRatio&nbsp;=&nbsp;range&nbsp;*&nbsp;g&nbsp;/&nbsp;v2;</code></td></tr>
<tr class="coverableline" title="Partially covered (29 visits, 1 of 2 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'orange'}}"><td class="orange">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line40"></a><code>40</code></td><td class="percentagebar percentagebar50"><i class="icon-fork"></i></td><td class="lightorange"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;angleRange&nbsp;=&nbsp;rangeRatio&nbsp;&gt;=&nbsp;1.0f</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line41"></a><code>41</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;45f&nbsp;*&nbsp;(float)Math.PI&nbsp;/&nbsp;180f</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line42"></a><code>42</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;(float)Math.Asin(rangeRatio)&nbsp;/&nbsp;2f;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line43"></a><code>43</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line44"></a><code>44</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;2.&nbsp;释放高度所需最小角H&nbsp;=&nbsp;v&#178;*sin&#178;(θ)/(2g)&nbsp;&nbsp;sin(θ)&nbsp;=&nbsp;√(2gH)/v</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line45"></a><code>45</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sinMinHeight&nbsp;=&nbsp;(float)Math.Sqrt(2f&nbsp;*&nbsp;g&nbsp;*&nbsp;releaseAltitude&nbsp;*&nbsp;1.05f)&nbsp;/&nbsp;muzzleVelocity;</code></td></tr>
<tr class="coverableline" title="Partially covered (29 visits, 1 of 2 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'orange'}}"><td class="orange">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line46"></a><code>46</code></td><td class="percentagebar percentagebar50"><i class="icon-fork"></i></td><td class="lightorange"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;angleHeight&nbsp;=&nbsp;sinMinHeight&nbsp;&gt;=&nbsp;1.0f</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line47"></a><code>47</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;90f&nbsp;*&nbsp;(float)Math.PI&nbsp;/&nbsp;180f</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line48"></a><code>48</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;(float)Math.Asin(sinMinHeight);</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line49"></a><code>49</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line50"></a><code>50</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Math.Max(angleRange,&nbsp;angleHeight);</code></td></tr>
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">29</td><td class="rightmargin right"><a id="file0_line51"></a><code>51</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line52"></a><code>52</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line53"></a><code>53</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;根据发射参数计算抛物线位置&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line54"></a><code>54</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;(float&nbsp;X,&nbsp;float&nbsp;Y,&nbsp;float&nbsp;Z)&nbsp;ParabolicPosition(</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line55"></a><code>55</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;startX,&nbsp;float&nbsp;startY,&nbsp;float&nbsp;startZ,</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line56"></a><code>56</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;launchAngle,&nbsp;float&nbsp;azimuth,</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line57"></a><code>57</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;muzzleVelocity,&nbsp;float&nbsp;time)</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line58"></a><code>58</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line59"></a><code>59</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cosA&nbsp;=&nbsp;(float)Math.Cos(launchAngle);</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line60"></a><code>60</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sinA&nbsp;=&nbsp;(float)Math.Sin(launchAngle);</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line61"></a><code>61</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;g&nbsp;=&nbsp;9.81f;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line62"></a><code>62</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line63"></a><code>63</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;horizontalDist&nbsp;=&nbsp;muzzleVelocity&nbsp;*&nbsp;cosA&nbsp;*&nbsp;time;</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line64"></a><code>64</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x&nbsp;=&nbsp;startX&nbsp;+&nbsp;horizontalDist&nbsp;*&nbsp;(float)Math.Sin(azimuth);</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line65"></a><code>65</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;z&nbsp;=&nbsp;startZ&nbsp;+&nbsp;horizontalDist&nbsp;*&nbsp;(float)Math.Cos(azimuth);</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line66"></a><code>66</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;y&nbsp;=&nbsp;startY&nbsp;+&nbsp;muzzleVelocity&nbsp;*&nbsp;sinA&nbsp;*&nbsp;time&nbsp;-&nbsp;0.5f&nbsp;*&nbsp;g&nbsp;*&nbsp;time&nbsp;*&nbsp;time;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line67"></a><code>67</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line68"></a><code>68</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(x,&nbsp;y,&nbsp;z);</code></td></tr>
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">738</td><td class="rightmargin right"><a id="file0_line69"></a><code>69</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line70"></a><code>70</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line71"></a><code>71</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;点到矩形距离(简化判定)&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line72"></a><code>72</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;float&nbsp;Distance2D(float&nbsp;x1,&nbsp;float&nbsp;z1,&nbsp;float&nbsp;x2,&nbsp;float&nbsp;z2)</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line73"></a><code>73</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line74"></a><code>74</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dx&nbsp;=&nbsp;x2&nbsp;-&nbsp;x1;</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line75"></a><code>75</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dz&nbsp;=&nbsp;z2&nbsp;-&nbsp;z1;</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line76"></a><code>76</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(float)Math.Sqrt(dx&nbsp;*&nbsp;dx&nbsp;+&nbsp;dz&nbsp;*&nbsp;dz);</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line77"></a><code>77</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line78"></a><code>78</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line79"></a><code>79</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;点到三维点距离&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line80"></a><code>80</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;float&nbsp;Distance3D(float&nbsp;x1,&nbsp;float&nbsp;y1,&nbsp;float&nbsp;z1,&nbsp;float&nbsp;x2,&nbsp;float&nbsp;y2,&nbsp;float&nbsp;z2)</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line81"></a><code>81</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line82"></a><code>82</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dx&nbsp;=&nbsp;x2&nbsp;-&nbsp;x1;</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line83"></a><code>83</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dy&nbsp;=&nbsp;y2&nbsp;-&nbsp;y1;</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line84"></a><code>84</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dz&nbsp;=&nbsp;z2&nbsp;-&nbsp;z1;</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line85"></a><code>85</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(float)Math.Sqrt(dx&nbsp;*&nbsp;dx&nbsp;+&nbsp;dy&nbsp;*&nbsp;dy&nbsp;+&nbsp;dz&nbsp;*&nbsp;dz);</code></td></tr>
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line86"></a><code>86</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line87"></a><code>87</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line88"></a><code>88</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;射线法&nbsp;&nbsp;点是否在水平多边形内&lt;/summary&gt;</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line89"></a><code>89</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;bool&nbsp;PointInPolygon(float&nbsp;px,&nbsp;float&nbsp;pz,&nbsp;ReadOnlySpan&lt;(float&nbsp;X,&nbsp;float&nbsp;Z)&gt;&nbsp;vertices)</code></td></tr>
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line90"></a><code>90</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Partially covered (77 visits, 1 of 2 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'orange'}}"><td class="orange">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line91"></a><code>91</code></td><td class="percentagebar percentagebar50"><i class="icon-fork"></i></td><td class="lightorange"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(vertices.Length&nbsp;&lt;&nbsp;3)&nbsp;return&nbsp;false;</code></td></tr>
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line92"></a><code>92</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;inside&nbsp;=&nbsp;false;</code></td></tr>
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line93"></a><code>93</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j&nbsp;=&nbsp;vertices.Length&nbsp;-&nbsp;1;</code></td></tr>
<tr class="coverableline" title="Covered (770 visits, 2 of 2 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '770', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">770</td><td class="rightmargin right"><a id="file0_line94"></a><code>94</code></td><td class="percentagebar percentagebar100"><i class="icon-fork"></i></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;vertices.Length;&nbsp;i++)</code></td></tr>
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">308</td><td class="rightmargin right"><a id="file0_line95"></a><code>95</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr class="coverableline" title="Covered (616 visits)" data-coverage="{'AllTestMethods': {'VC': '616', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">616</td><td class="rightmargin right"><a id="file0_line96"></a><code>96</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xi&nbsp;=&nbsp;vertices[i].X;&nbsp;var&nbsp;zi&nbsp;=&nbsp;vertices[i].Z;</code></td></tr>
<tr class="coverableline" title="Covered (616 visits)" data-coverage="{'AllTestMethods': {'VC': '616', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">616</td><td class="rightmargin right"><a id="file0_line97"></a><code>97</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xj&nbsp;=&nbsp;vertices[j].X;&nbsp;var&nbsp;zj&nbsp;=&nbsp;vertices[j].Z;</code></td></tr>
<tr class="coverableline" title="Covered (308 visits, 4 of 4 branches are covered)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">308</td><td class="rightmargin right"><a id="file0_line98"></a><code>98</code></td><td class="percentagebar percentagebar100"><i class="icon-fork"></i></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((zi&nbsp;&gt;&nbsp;pz)&nbsp;!=&nbsp;(zj&nbsp;&gt;&nbsp;pz)&nbsp;&amp;&amp;&nbsp;px&nbsp;&lt;&nbsp;(xj&nbsp;-&nbsp;xi)&nbsp;*&nbsp;(pz&nbsp;-&nbsp;zi)&nbsp;/&nbsp;(zj&nbsp;-&nbsp;zi)&nbsp;+&nbsp;xi)</code></td></tr>
<tr class="coverableline" title="Covered (145 visits)" data-coverage="{'AllTestMethods': {'VC': '145', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">145</td><td class="rightmargin right"><a id="file0_line99"></a><code>99</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inside&nbsp;=&nbsp;!inside;</code></td></tr>
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">308</td><td class="rightmargin right"><a id="file0_line100"></a><code>100</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;i;</code></td></tr>
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">308</td><td class="rightmargin right"><a id="file0_line101"></a><code>101</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line102"></a><code>102</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;inside;</code></td></tr>
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">77</td><td class="rightmargin right"><a id="file0_line103"></a><code>103</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line104"></a><code>104</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line105"></a><code>105</code></td><td></td><td class="lightgray"><code>}</code></td></tr>
</tbody>
</table>
</div>
<div class="footer">Generated by: ReportGenerator 5.5.10.0<br />2026/6/11 - 16:35:36<br /><a href="https://github.com/danielpalme/ReportGenerator">GitHub</a> | <a href="https://reportgenerator.io">reportgenerator.io</a></div></div>
<div class="containerright">
<div class="containerrightfixed">
<h1>Methods/Properties</h1>
<a href="#file0_line11" class="navigatetohash percentagebar percentagebar60" title="Line coverage: 62.5% - WindToVector(CounterDrone.Core.Models.WindDirection,System.Single)"><i class="icon-cube"></i>WindToVector(CounterDrone.Core.Models.WindDirection,System.Single)</a><br />
<a href="#file0_line34" class="navigatetohash percentagebar percentagebar100" title="Line coverage: 100% - CalculateLaunchAngle(System.Single,System.Single,System.Single)"><i class="icon-cube"></i>CalculateLaunchAngle(System.Single,System.Single,System.Single)</a><br />
<a href="#file0_line58" class="navigatetohash percentagebar percentagebar100" title="Line coverage: 100% - ParabolicPosition(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)"><i class="icon-cube"></i>ParabolicPosition(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)</a><br />
<a href="#file0_line73" class="navigatetohash percentagebar percentagebar0" title="Line coverage: 0% - Distance2D(System.Single,System.Single,System.Single,System.Single)"><i class="icon-cube"></i>Distance2D(System.Single,System.Single,System.Single,System.Single)</a><br />
<a href="#file0_line81" class="navigatetohash percentagebar percentagebar0" title="Line coverage: 0% - Distance3D(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)"><i class="icon-cube"></i>Distance3D(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)</a><br />
<a href="#file0_line90" class="navigatetohash percentagebar percentagebar100" title="Line coverage: 100% - PointInPolygon(System.Single,System.Single,System.ReadOnlySpan`1&lt;System.ValueTuple`2&lt;System.Single,System.Single&gt;&gt;)"><i class="icon-cube"></i>PointInPolygon(System.Single,System.Single,System.ReadOnlySpan`1&lt;System.ValueTuple`2&lt;System.Single,System.Single&gt;&gt;)</a><br />
<br/></div>
</div></div>
<script type="text/javascript" src="class.js"></script>
</body></html>