给定两点和半径画弧

问题描述 投票:0回答:2

给定两点和半径绘制圆弧。

我怎样才能理解这里给出的答案?

从起点、终点和半径画弧

https://stackoverflow.com/a/36872927/261439

geometry html5-canvas
2个回答
1
投票

设起点为

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

有了中心,你可以在你的框架中定义绘制圆弧所需的参数


0
投票

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旋转得到圆弧上的点。(旋转公式

© www.soinside.com 2019 - 2024. All rights reserved.