【问题标题】:Find line that is tangent to 2 given circles找到与 2 个给定圆相切的线
【发布时间】:2015-01-15 18:12:04
【问题描述】:

我遇到的情况是我有 2 个圈子(C1 和 C2) 我需要找到与这两个圆相切的直线的直线方程。

据我所知,给定一个点 (P1) 和 C2 的点和半径,可以很容易地得到 C2 和 P1 的 2 个可能的切点来制作 2 个直线方程。但由于我没有 P1,只知道该点将是 C1 上可能的 2 个点之一,我不知道如何计算。

我认为这将类似于获得 C1 的 2 个切线方程,它们等于 C2 的相同。

两个圆可以有任意半径,可以相同,也可以大不相同。它们也永远不会重叠(尽管它们仍然可以触摸)。我正在寻找 2 个可能的内切线。

哦,还有,视觉效果会很有帮助哈哈:)

【问题讨论】:

  • 更适合stackexchange
  • 有 4 条可能的线与两个圆相切。你想要哪一个 ?另外,两个圆圈大小相同吗?我使用其中的 2 个(外切线)in this post,否则维基百科文章 Tangent lines to circles 是一本不错的读物。
  • 还有C1 = C2的简并情况,其中有无穷多个解。
  • 两个圆可以有任意半径,可以相同,也可以大不相同。它们也永远不会重叠(尽管它们仍然可以触摸)。我正在寻找两个可能的内切线。可能应该包括那个,我的错!

标签: math line geometry


【解决方案1】:

O 为通过中心的线与切线的交点。

d 是中心之间的距离,h1h2O 和中心之间的距离。通过相似性,这些与半径成正比。

因此,

h1 / h2 = r1 / r2 = m,
h1 + h2 = d,

给予

h1 = m d / (1 + m),
h2 =   d / (1 + m).

然后O的坐标通过中心之间的插值得到

xo = (h2.x1 + h1.x2) / d
yo = (h2.y1 + h1.y2) / d

并且切线的角度是通过中心的线加上或减去这条线与切线之间的角度,

a = arctan((y2 - y1)/(x2 - x1)) +/- arcsin(r1 / h1).

切线的隐式方程可以写成

cos(a).y - sin(a).x = cos(a).yo - sin(a).xo.

【讨论】:

    【解决方案2】:


    (来源:imag.fr

    所以我们将使用一个类比变换。如果圆 C 和 C' 分别有圆心 O 和 O',半径 r 和 r',那么我们知道存在一个圆心 J 和比率 a 的唯一类似变换,使得:

    a = |JO|/|JO'| = r/r'
    

    注意 AB 是从 A 到 B 的向量,而 |z|向量 z 的范数。

    因此您得到J,知道它位于我们都已经知道的 O 和 O' 之间。

    然后用 u 是 JR 在 JO' 上的投影,v 是在其正交上的分解,并考虑 O'JR 所成角度的正弦 s 和余弦 c,我们有

    |u| = |JR| * c
    |v| = |JR| * s
    c^2 + s^2 = 1
    

    最后因为三角形 JRO' 在 R 中是直角的:

    s = r' / |JO|'
    

    将所有这些放在一起,我们得到:

    J = O + OO' / |OO'| * a / (a+1)
    if |OJ| == r and |O'J| == r' then
        return the orthogonal line to (OO') passing through J
    |JR| = √( |JO'|^ - r'^2 )
    s = r' / |JO'|
    c = √( 1 - s^2 )
    u = c * |JR| * OO' / |OO'|
    w = (-u.y, u.x)                       % any orthogonal vector to u
    v = s * |JR| * w / |w|
    return lines corresponding to parametric equations J+t*(u+v) and J+t*(u-v)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多