设起点为
S
,终点为E
中心
C
位于垂直于SE
段的中间,所以我们应该找到向量:
se = (E.x - S.x, E.y - S.y)
perp = (-se.y, se.x) = (S.y - E.y, E.x - S.x)
perp_normalized = perp / Len(perp)
L = Len(perp) = sqrt((S.y - E.y)^2+(S.x - E.x)^2)
perp_normalized = (S.y - E.y)/L, (E.x - S.x)/L
和
SE
段的中点
M = ((E.x + S.x)/2, (E.y + S.y)/2)
M
到圆心的距离为
D = sqrt(R^2-L^2/4)
现在我们可以用参数方程表示圆心
C
坐标,有两种可能的变体:
C = M +/- perp_normalized*D
C1.x = M.x + perp_normalized.x * D
C1.y = M.y + perp_normalized.y * D
C2.x = M.x - perp_normalized.x * D
C2.y = M.y - perp_normalized.y * D
有了中心,你可以在你的框架中定义绘制圆弧所需的参数
C是DE的中点,所以AB和DE垂直(中点定理)
AC=sqrt(AD^2-CD^2) (毕达哥拉斯定理)
DE=sqrt(AD^2-CD^2) (毕达哥拉斯定理)
三角形ACF和EDG是相似的三角形s,按比例缩放 AC:DE=AF:EG=CF:DG
DG 和 EG 是已知的。上面给出了 AC 和 DE。然后我们得到 CF 和 AF。 (并且可以证明 dX(G->D) 和 dY(C->F) 同号;dX(E->G) 和 dY(F->A) 反号。)
因此我们得到圆心。
我们可以通过D绕A旋转得到圆弧上的点。(旋转公式)