擅长:python、mysql、java
<p>我把你的问题陈述读了如下:给定2个点,一个中心点,求出两个向量之间的夹角,如果是逆时针的话,就是正的。在</p>
<p>如果我的前提是正确的,那么你可以</p>
<ul>
<li>求出<em>A→B</em>与穿过<em>A</em>的水平向右线之间的夹角</li>
<li>求出<em>A→O</em>与穿过<em>A</em>的水平向右线之间的夹角</li>
<li>求出角度<em>A</em>到<em>B</em>作为所述角度的差</li>
<li>规范化结果范围,使其介于-π和+π之间。在</li>
</ul>
<p>我所说的可以想象如下</p>
<p><a href="https://i.stack.imgur.com/OEsLB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/OEsLB.png" alt="enter image description here"/></a>
或者在代码中(假设一个<code>Point</code>类,具有<code>x</code>和<code>y</code>属性)</p>
<pre><code>AhAB = math.atan2((B.y-A.y), (B.x-A.x)) # -π < AhAB ≤ +π
AhAO = math.atan2((O.y-A.y), (O.x-A.x)) # -π < AhA) ≤ +π
AB = AhAB - AhAO # -2π < AB ≤ +2π
AB = AB + ( 2*math.pi if AB < math.pi else (-2*math.pi if AB> math.pi else 0))
</code></pre>
<p>附录</p>
<p>这里是一个小的代码示例,点的位置与您在图片中看到的类似</p>
^{pr2}$
<p>最后一行规范化结果<code>AB</code>在正确的范围<code>-π < AB ≤ π</code>,加上或减去{<cd6>},这不会改变测量角度的意义。在</p>