<p>让我们从<code>funcAngle</code>开始,因为它稍后调用computeDegree</p>
<p>它做的第一件事是将<code>a</code>定义为两项元组。这段代码中的很多似乎使用了两个项元组,其中两个部分由<code>v[0]</code>和<code>v[1]</code>或类似引用。这些几乎可以肯定是某种二维向量</p>
<p>我将把这些写为𝐯 对于向量和vₓ 及vᵧ 因为它们可能是两个组成部分。
[不要太仔细地看第二个下标,它完全是y而不是gamma…]</p>
<p><code>a</code>是<code>s</code>和<code>p</code>之间的向量差:即</p>
<pre><code>a = (s[0]-p[0], s[1]-p[1])
</code></pre>
<p>是一个ₓ=sₓ-Pₓ 和ᵧ=sᵧ-Pᵧ; 或者只是𝐚=𝐬-𝐩 在向量中</p>
<pre><code>b = (sn[0]-p[0], sn[1]-p[1])
</code></pre>
<p>再次;𝐛=𝐬𝐧-𝐩 </p>
<pre><code>c = a[0] * b[1] - a[1] * b[0]
</code></pre>
<p>c=aₓBᵧ-A.ᵧBₓ; <code>c</code>是𝐚 和𝐛 (这只是一个数字)</p>
<pre><code>if p != sn:
d = computeDegree(s, p, sn)
else:
d = 0
</code></pre>
<p>我倒过来看:如果𝐩 和𝐬𝐧 如果它们是相同的,那么我们已经知道它们之间的角度是零(而且算法可能会严重失败),所以不要计算它。否则,计算角度(我们将在后面讨论)</p>
<pre><code>if c > 0:
result = d
elif c < 0:
result = -d
elif c == 0:
result = 0
</code></pre>
<p>如果c指向法线方向(通过左手法则?右手法则?记不起来),这很好:如果不是,我们需要否定角度,显然</p>
<pre><code>return result
</code></pre>
<p>把我们刚算出的数字传给其他代码</p>
<p>您可能可以通过添加以下内容来调用此代码:</p>
<p><code>print (funcangle((1,0),(0,1),(2,2))</code></p>
<p>最后,运行它。(尚未实际测试这些数字)</p>
<hr/>
<p>这个函数算出a和b,得到c;如果角度指向错误的方向,所有这些都只是为了抵消角度。这些变量实际上都没有传递给computeDegree</p>
<p>因此,computeDegree():</p>
<pre><code>def computeDegree(a,b,c):
</code></pre>
<p>首先要注意的是,以前的变量已经重命名<code>funcAngle</code>传递了s、p和sn,但现在它们被称为a、b和c。它们被传递的顺序和它们被传递到funcAngle的顺序不一样,这是令人讨厌和困惑的</p>
<pre><code>babc = (a[0]-b[0])*(c[0]-b[0])+(a[1]-b[1])*(c[1]-b[1])
</code></pre>
<p>babc=(a)ₓ-Bₓ)(c)ₓ-Bₓ)+(一)ᵧ-Bᵧ)(c)ᵧ-Bᵧ) </p>
<p>如果𝐚' 和𝐜' 是𝐚-𝐛 和𝐜-𝐛 这分别是公正的</p>
<p>a'ₓc'ₓ+a'ᵧc'ᵧ, 或的点积𝐚' 和𝐜'. </p>
<pre><code>norm_ba = math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)
norm_bc = math.sqrt((c[0]-b[0])**2 + (c[1]-b[1])**2)
</code></pre>
<p><code>norm_ba</code>=√[(a)ₓ-Bₓ)²+(a)ᵧ-Bᵧ)²](和<code>norm_bc</code>同样)</p>
<p>这看起来像是斜边的长度𝐚' (及𝐜' (分别)</p>
<pre><code>norm_babc = norm_ba * norm_bc
</code></pre>
<p>然后我们把它们相乘</p>
<pre><code>radian = math.acos(babc/norm_babc)
</code></pre>
<p>我们使用反余弦(反余弦,cos^-1)函数,以相乘斜边的长度作为斜边,点积作为相邻长度</p>
<pre><code>degree = math.degrees(radian)
return round(degree, 1)
</code></pre>
<p>但这是弧度,所以我们转换成度,并将其四舍五入以获得良好的格式</p>
<hr/>
<p>好的,现在是数学,而不是Python,但这仍然不是很容易理解</p>
<p>(旁注:这就是为什么描述性变量名和文档是每个人的朋友!)</p>