我一直在努力解决通过点 P 在 C1 和 C2 之间设置切线弧的问题。我希望找到一种使用数学或几何来解决这个问题的方法,因为我需要在一些限制下对其进行编程在软件界面中。进一步详细信息如下图所示,我的目标是获得类似于图像中白色虚线的结果,其中 C1 是黄色圆圈的中心,C2 是绿色圆圈的中心,P1 是所需穿过的点,M是 C1 和 C2 之间的中点。提前感谢您的帮助。
我尝试了几种不同的方法,但在更改变量时找不到有效的答案。
我假设圆有相等的半径
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