擅长:python、mysql、java
<p>如果使用顶点的(x,y)坐标绘制,则至少有三个连续的自由度:2个用于选择顶点A的位置,另一个用于从A到B的方向。然后,有一个用于标记顶点的顺时针或逆时针顺序的二进制选择。</p>
<p>如果你不在乎使用哪一个,那么你可以把A放在(0,0),B放在(0,c),然后求解两个圆的交集:半径A以B为中心,半径B以A为中心</p>
<pre><code>x² + y² = b²
(x - c)² + y² = a² .... subtract these to eliminate y²
(x - c)² - x² = a² - b²
-2cx + c² = a² - b²
2cx = c² + b² - a²
x = (c² + b² - a²)/(2c)
y = ± √[ b² - x² ] .... choose - for clockwise, + for counter-clockwise
</code></pre>
<p>现在有三个点A=(0,0),B=(0,c)和c=(x,y),分别对应于所需的对边长度A,B,c。如果需要角度,请使用trig中的余弦定律:</p>
<pre><code>c² = a² + b² - 2ab(cos C)
2ab(cos C) = a² + b² - c²
C = cos⁻¹[ (a² + b² - c²)/(2ab) ]
</code></pre>
<p>同样的模式也适用于A和B的求解,它们是内角。对于海龟来说,旋转角度是外角,所以从A点开始,向任何方向移动(c),旋转(180-B),然后移动(A),然后旋转(180-B),然后移动(B)。</p>