246 lines
52 KiB
HTML
246 lines
52 KiB
HTML
<!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"><</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<System.ValueTuple`2<System.Single,System.Single>>)"><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"> </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 System;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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 CounterDrone.Core.Models;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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 CounterDrone.Core.Algorithms</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>通用运动学 / 几何工具</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static class Kinematics</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> {</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> /// <summary>风向 → 单位速度矢量 (X, 0, Z),右手系 Y-up</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static (float X, float Y, float Z) WindToVector(WindDirection dir, float speed)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> {</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"> </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> var angle = dir switch</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Covered (4642 visits)" data-coverage="{'AllTestMethods': {'VC': '4642', 'LVS': 'green'}}"><td class="green"> </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> WindDirection.N => 0f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> WindDirection.NE => 45f,</code></td></tr>
|
||
<tr class="coverableline" title="Covered (136 visits)" data-coverage="{'AllTestMethods': {'VC': '136', 'LVS': 'green'}}"><td class="green"> </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> WindDirection.E => 90f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> WindDirection.SE => 135f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> WindDirection.S => 180f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> WindDirection.SW => 225f,</code></td></tr>
|
||
<tr class="coverableline" title="Covered (1152 visits)" data-coverage="{'AllTestMethods': {'VC': '1152', 'LVS': 'green'}}"><td class="green"> </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> WindDirection.W => 270f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> WindDirection.NW => 315f,</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> _ => 0f,</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> };</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> var rad = angle * (float)Math.PI / 180f;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> return ((float)Math.Sin(rad) * speed, 0, (float)Math.Cos(rad) * speed);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (5930 visits)" data-coverage="{'AllTestMethods': {'VC': '5930', 'LVS': 'green'}}"><td class="green"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>计算抛物线炮弹的发射角</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> /// <param name="range">水平距离 (m)</param></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> /// <param name="muzzleVelocity">初速 (m/s)</param></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> /// <param name="releaseAltitude">释放高度 (m),弹道顶点必须 ≥ 此值</param></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> /// <returns>发射角 (rad),取低弹道</returns></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static float CalculateLaunchAngle(float range, float muzzleVelocity, float releaseAltitude)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> var v2 = muzzleVelocity * muzzleVelocity;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> var g = 9.81f;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> // 1. 射程所需角:θr = arcsin(R*g/v²) / 2</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> var rangeRatio = range * g / 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"> </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> var angleRange = rangeRatio >= 1.0f</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> ? 45f * (float)Math.PI / 180f</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> : (float)Math.Asin(rangeRatio) / 2f;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> // 2. 释放高度所需最小角:H = v²*sin²(θ)/(2g) → sin(θ) = √(2gH)/v</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> var sinMinHeight = (float)Math.Sqrt(2f * g * releaseAltitude * 1.05f) / 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"> </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> var angleHeight = sinMinHeight >= 1.0f</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> ? 90f * (float)Math.PI / 180f</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> : (float)Math.Asin(sinMinHeight);</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> return Math.Max(angleRange, angleHeight);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (29 visits)" data-coverage="{'AllTestMethods': {'VC': '29', 'LVS': 'green'}}"><td class="green"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>根据发射参数计算抛物线位置</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static (float X, float Y, float Z) ParabolicPosition(</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> float startX, float startY, float startZ,</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> float launchAngle, float azimuth,</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> float muzzleVelocity, float time)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var cosA = (float)Math.Cos(launchAngle);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var sinA = (float)Math.Sin(launchAngle);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var g = 9.81f;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> var horizontalDist = muzzleVelocity * cosA * time;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var x = startX + horizontalDist * (float)Math.Sin(azimuth);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var z = startZ + horizontalDist * (float)Math.Cos(azimuth);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> var y = startY + muzzleVelocity * sinA * time - 0.5f * g * time * time;</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> return (x, y, z);</code></td></tr>
|
||
<tr class="coverableline" title="Covered (738 visits)" data-coverage="{'AllTestMethods': {'VC': '738', 'LVS': 'green'}}"><td class="green"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>点到矩形距离(简化判定)</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static float Distance2D(float x1, float z1, float x2, float z2)</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> var dx = x2 - x1;</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> var dz = z2 - z1;</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> return (float)Math.Sqrt(dx * dx + dz * dz);</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>点到三维点距离</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static float Distance3D(float x1, float y1, float z1, float x2, float y2, float z2)</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> var dx = x2 - x1;</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> var dy = y2 - y1;</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> var dz = z2 - z1;</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> return (float)Math.Sqrt(dx * dx + dy * dy + dz * dz);</code></td></tr>
|
||
<tr class="coverableline" title="Not covered (0 visits)" data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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"> </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> /// <summary>射线法 — 点是否在水平多边形内</summary></code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> public static bool PointInPolygon(float px, float pz, ReadOnlySpan<(float X, float Z)> vertices)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green"> </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> {</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"> </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> if (vertices.Length < 3) return false;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green"> </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> bool inside = false;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green"> </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> int j = vertices.Length - 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"> </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> for (int i = 0; i < vertices.Length; i++)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green"> </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> {</code></td></tr>
|
||
<tr class="coverableline" title="Covered (616 visits)" data-coverage="{'AllTestMethods': {'VC': '616', 'LVS': 'green'}}"><td class="green"> </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> var xi = vertices[i].X; var zi = vertices[i].Z;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (616 visits)" data-coverage="{'AllTestMethods': {'VC': '616', 'LVS': 'green'}}"><td class="green"> </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> var xj = vertices[j].X; var zj = 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"> </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> if ((zi > pz) != (zj > pz) && px < (xj - xi) * (pz - zi) / (zj - zi) + xi)</code></td></tr>
|
||
<tr class="coverableline" title="Covered (145 visits)" data-coverage="{'AllTestMethods': {'VC': '145', 'LVS': 'green'}}"><td class="green"> </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> inside = !inside;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green"> </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> j = i;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (308 visits)" data-coverage="{'AllTestMethods': {'VC': '308', 'LVS': 'green'}}"><td class="green"> </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> }</code></td></tr>
|
||
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green"> </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> return inside;</code></td></tr>
|
||
<tr class="coverableline" title="Covered (77 visits)" data-coverage="{'AllTestMethods': {'VC': '77', 'LVS': 'green'}}"><td class="green"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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> }</code></td></tr>
|
||
<tr class="" title="Not coverable" data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray"> </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<System.ValueTuple`2<System.Single,System.Single>>)"><i class="icon-cube"></i>PointInPolygon(System.Single,System.Single,System.ReadOnlySpan`1<System.ValueTuple`2<System.Single,System.Single>>)</a><br />
|
||
<br/></div>
|
||
</div></div>
|
||
<script type="text/javascript" src="class.js"></script>
|
||
</body></html> |