Math 找到与2个给定圆相切的直线

Math 找到与2个给定圆相切的直线,math,line,geometry,Math,Line,Geometry,我有两个圆圈(C1和C2) 我需要找到直线方程,它与这两个圆相切 据我所知,给定一个点(P1)和C2的点和半径,可以很容易地得到C2和P1的两个可能的切点,从而建立两条直线方程。但由于我没有P1,只有C1上可能的两点之一,我不知道如何计算 我假设它是沿着得到C1的两个切线方程的直线,这两个方程等于C2 两个圆可以有任何半径,它们可以相同,也可以大不相同。它们也永远不会重叠(尽管它们仍然可以接触)。我在寻找两条可能的内切线 哦,还有,视觉效果会很有帮助的哈哈:) (来源:) 所以我们将使用同位旋变

我有两个圆圈(C1和C2) 我需要找到直线方程,它与这两个圆相切

据我所知,给定一个点(P1)和C2的点和半径,可以很容易地得到C2和P1的两个可能的切点,从而建立两条直线方程。但由于我没有P1,只有C1上可能的两点之一,我不知道如何计算

我假设它是沿着得到C1的两个切线方程的直线,这两个方程等于C2

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

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


(来源:)

所以我们将使用同位旋变换。如果圆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)

(来源:)

所以我们将使用同位旋变换。如果圆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)

(来源:)

所以我们将使用同位旋变换。如果圆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)

(来源:)

所以我们将使用同位旋变换。如果圆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)

O
为穿过中心的直线与切线的交点

d
为中心与
h1
之间的距离,
h2
O
与中心之间的距离。根据相似性,它们与半径成正比

因此,

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.

O
为穿过中心的直线与切线的交点

d
为中心与
h1
之间的距离,
h2
O
与中心之间的距离。根据相似性,它们与半径成正比

因此,

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.

O
为穿过中心的直线与切线的交点

d
为中心与
h1
之间的距离,
h2
O
与中心之间的距离。根据相似性,它们与半径成正比

因此,

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.

O
为穿过中心的直线与切线的交点

d
为中心与
h1
之间的距离,
h2
O
与中心之间的距离。相似之处在于