在 2 个相交圆和已知点之间创建切向圆弧

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

我一直在努力解决通过点 P 在 C1 和 C2 之间设置切线弧的问题。我希望找到一种使用数学或几何来解决这个问题的方法,因为我需要在一些限制下对其进行编程在软件界面中。进一步详细信息如下图所示,我的目标是获得类似于图像中白色虚线的结果,其中 C1 是黄色圆圈的中心,C2 是绿色圆圈的中心,P1 是所需穿过的点,M是 C1 和 C2 之间的中点。提前感谢您的帮助。

Example

我尝试了几种不同的方法,但在更改变量时找不到有效的答案。

geometry computational-geometry
1个回答
0
投票

我假设圆有相等的半径

R
,从中心线到圆心的距离是
D
,点
P
坐标是
py
R=5, D=3, py=3.39
的示例:

穿过点

P
的小圆接触点
F
中的大圆(以及点
G
中的另一个圆)。它的中心
E
具有纵坐标
cy
(尚未知),触摸点
F
具有坐标
tx, ty
(尚未知)。让我们定义向量

CF = (tx+D, ty)
EF = (tx, ty-cy)

向量

CF
EF
共线(它们是接触圆的法线),因此它们的叉积为零:

(tx+D)*(ty-cy)-ty*tx=0

我们还可以写出两个向量长度方程作为大圆和小圆的半径:

(tx+D)^2+ty^2 = R^2
tx^2+(ty-cy)^2=(py-cy)^2

现在我们有了三个未知数的三个方程,我已将这个系统放入 Maple 求解器中

结果很简单。我们只需要

cy
值。

请注意,当

cy
是小弧线的最低点(
P
上方非常小的圆)时,一个(较大的)
P
值对应于这种情况

Python 小代码:

D = 3
py = 3.39
R = 5
cy = -1/2*(D**2-R**2+2*py*R-py**2)/(py-R)
print(cy)
cy = 1/2*(R**2+2*R*py+py**2-D**2)/(py+R)
print(cy)

给予

1.9900310559006207
3.6586471990464835

其中第一个值小于

py
,我们希望该值作为小圆中心(我的图片中为2.0)。这里的小半径:
r=py-cy=1.39

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