明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3137|回复: 3

圆的公切线

[复制链接]
发表于 2007-5-28 09:30 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-5-28 9:49:19 编辑

的公切线()

已知:  两圆c1, c2的半径分别为r1(>0), r2(>0), 圆心分别为P1, P2.

      两圆心间的距离设为d, 圆心P1, P2的中点设为M.

:  圆c1, c2的公切线.

 显然这是2D的平面问题.

A 几何方法:

  公切线与过两圆圆心的直线有一交点, 该交点在两圆圆心之间时称该公切线为内公切线, 不在两圆圆心之间时称该公切线为外公切线.

1. 两圆的外公切线

                 外公切线

1.1 r1≠r2

1.1.1 |r1-r2|<d

  如上图, 不失一般性可假设r1>r2

  以P1为圆心, r1-r2为半径画圆为c3, 又以M为圆心, d/2为半径画圆为c4, 则圆c3与圆c4相交于点Q (有两点), 已P1为起点, 过点Q可作1条射线, 该射线交圆c1于点T1(外公切线与圆c1相切的点), 过P2作P1T1的平行线, 交圆c2于点T2(与点T1在线段P1P2的同侧). 因为点Q有两点, 所以总共可求得两组外公切线.

1.1.2 |r1-r2|=d

  两圆内切, 两圆外公切线的切点T1和T2均与两圆切点重合.
    
过两圆切点作直线段P1P2的垂线, 该垂线就是外公切线(只有一组).

1.1.3 |r1-r2|>d

  无公切线

1.2 r1=r2

1.2.1 d=0

  两圆重合, 有无数的外公切线(无意义, 应排除).

1.2.2 d≠0

  设外公切点为分别T1, T2, 显然角T1P1P2 等于 角T2P2P1等于 90˚.

  所以, 过P1, P2点分别作线段P1P2的垂线, 与圆c1, c2分别有两个交点, 在线段P1P2的同侧的点就是外公切点T1, T2 (有两组).

2. 两圆的内公切线

                 内公切线

2.1 r1+r2<d

  如上图, 以P1为圆心, r1+r2为半径画圆为c3, 又以M为圆心, d/2为半径画圆为c4, 则圆c3与圆c4相交于点Q (有两点), 用直线连接点P1与Q, 则线段P1Q交圆c1于点T1(内公切线与圆c1相切的点), 过P2作P1T1的平行线, 交圆c2于点T2(与点T1不在线段P1P2的同侧). 因为点Q有两点, 所以总共可求两组内公切线.

2.2 r1+r2=d

  两圆外切, 两圆内公切线的切点T1和T2均与两圆切点重合.
    
过两圆切点作直线段P1P2的垂线, 该垂线就是内公切线(只有一组).

2.3
    r1+r2>d

  两圆间不存在内公切线.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-5-28 09:42 | 显示全部楼层
本帖最后由 作者 于 2007-5-29 9:26:24 编辑

的公切线()

B 解析几何方法:

  为求解公切线, 首先要确定是画外公切线, 还是内公切线.
   
可以通过对话框或输入关键词来确定是画外公切线, 还是内公切线. 由于一般情况下外公切线和内公切线各有两条, 所以还得确定画在什么位置.

  此处采用以下方法: 如下图所示, 在选择圆时, 使选择点S1, S2靠近公切线的切点T1, T2(大概范围, 应远离由两圆心P1, P2确定直线), 当选择点(S1, S2)在由两圆心确定直线的同一侧时, 就在相应的一侧画外公切线, 不在同一侧时, 就在相应的部位画内公切线.

      同一侧                             异侧

  设以P1为起点, 以P2, S1, S2为终点的矢量的单位长度矢量分别为V0, V1V2.

    V0= (P2 - P1)/|P2 - P1|

    V1=(S1 - P1)/|S1 - P1|

    V2=(S2 - P1)/|S2 - P1|

  关于"已知一直线(给定不重合的两端点P1, P2), 确定两点S1, S2是否在直线的同一侧?"的问题,
   感兴趣者请参考帖子"点在直线哪一侧问题的求解".

1. 两圆的外公切线

  这时选择点S1与S2在过两圆心P1, P2的直线的同一侧,

   (V0×V1) · (V0×V2) > 0

          外公切线

1.1 |r1-r2|<d

  如上图, 假设r1>r2. 以P1为圆心, r1-r2为半径画圆为c3, 又以M为圆心, d/2为半径画圆为c4, 则圆c3与圆c4相交于点Q (有两点), 已P1为起点, 过点Q可作1条射线, 该射线交圆c1于点T1(外公切线与圆c1相切的点), 过P2作P1T1的平行线, 交圆c2于点T2(与点T1在线段P1P2的同侧). 因为点Q有两点, 所以总共可求得两组外公切线.

以下用解析几何方法求T1T2(数组的索引从0开始).

  T1 = (T1(0), T1(1), T1(2) )TT2 = (T2(0), T2(1), T2(2) )T, 又设角P2P1Q为q (逆时针旋转为正), 则

    -π/2 < q < π/2

    cosq = (r1 - r2) / d  >0   (上述模型中r1-r2为圆c3的半径, 必须满足r1>r2 *1)

因为点Q有两点, 所以

   q = ±Arccos((r1 - r2) / d)

q 的符号可由外积(V0×V1)与z轴的正方向(0, 0, 1)T按以下方法确定,

     当 (V0×V1) · (0, 0, 1)T > 0, 即V0(0)V1(1) - V0(1)V1(0) > 0 时, q = Arccos((r1 - r2) / d)

     当 (V0×V1) · (0, 0, 1)T < 0, 即V0(0)V1(1) - V0(1)V1(0) < 0 时, q = -Arccos((r1 - r2) / d)

  设以P1为起点, 以T1为终点的矢量的单位长度矢量为V3, 则

   V3 = P1T1 / |P1T1|                  (未知)

  未知单位长度矢量V3可以由单位长度矢量V0按逆时针旋转q 弧度获得. 而矢量按逆时针旋转q 弧度,
   就相当于对应的坐标轴按逆时针旋转-q 弧度而得到的结果,
   这时的坐标旋转转换矩阵a

由坐标转换, 矢量V3可由下式计算

   V3(i) =a(i, j) V0(j)            (i=0,2; j=0,2)

所以,

   T1(i) = 1(i) + r1V3(i)        (i=0,2)

   T2(i) = 2(i) + r2V3(i)        (i=0,2)

注*1:

  当r1=r2时, 虽然用前述的几何法无法做出公切线, 但解析方法仍然可以正确地求出T1T2 (此时, q
  = ±π/2);

  当r1<r2时, 可同时互换P1与P2, r1与r2的值, 以满足r1<r2的要求.

1.2 |r1-r2|=d

1.2.1
  d=0 (r1=r2)

  两圆重合, 有无数的外公切线(无意义, 应排除).

1.2.2 d≠0

  两圆内切, 两圆外公切线的切点T1和T2均与两圆切点重合.
   
过两圆切点作直线段P1P2的垂线, 该垂线就是外公切线(只有一组).
  切点T1和T2可以用1.1的方法算出.

1.3 |r1-r2|>d

  无公切线

 

 

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-5-28 09:44 | 显示全部楼层
本帖最后由 作者 于 2007-5-28 16:11:43 编辑

2. 两圆的内公切线
   

  这时选择点S1与S2不在过两圆心P1, P2的直线的同一侧,
   

   (V0×V1) · (V0×V2) < 0

          内公切线

2.1 r1+r2<d
    

  如上图, 以P1为圆心, r1+r2为半径画圆为c3, 又以M为圆心, d/2为半径画圆为c4, 则圆c3与圆c4相交于点Q (有两点), 用直线连接点P1与Q, 则线段P1Q交圆c1于点T1(内公切线与圆c1相切的点), 过P2作P1T1的平行线, 交圆c2于点T2(与点T1不在线段P1P2的同侧). 因为点Q有两点, 所以总共可求两组内公切线.

以下用解析几何方法求T1T2(数组的索引从0开始).

  T1= (T1(0), T1(1), T1(2) )T, T2 = (T2(0), T2(1), T2(2) )T, 又设角P2P1Q为q (逆时针旋转为正), 则
    

   -π/2 < q < π/2

   cosq = (r1 + r2) / d >0   (因为r1 + r2恒大于0, 所以r1与r2的大小关系可以是任意的)

因为点Q有两点, 所以
     

   q = ±Arccos((r1 + r2) / d)
    

  与外公切线的计算相同, q 的符号可同样由外积(V0×V1)与z轴的正方向(0, 0, 1)T来确定.

  以P1为起点, 以T1为终点的矢量的单位长度矢量V3,可同样由单位长度矢量V0按逆时针旋转q 弧度获得, 坐标旋转转换矩阵a
   也与外公切线的计算相同, 矢量V3可由下式计算
    

   V3(i) =a(i, j) V0(j)            (i=0,2; j=0,2)
    

所以,

   T1(i) =P1(i) + r1V3(i)   (i=0,2)
    

   T2(i) =P2(i) - r2V3(i)   (i=0,2)  (因T2与T1不在线段P1P2的同一侧,所以取"-")
     

2.2 r1+r2=d
     

  两圆外切, 两圆内公切线的切点T1和T2均与两圆切点重合.
    
过两圆切点作直线段P1P2的垂线, 该垂线就是内公切线(只有一组).
   切点T1和T2可以用2.1的方法算出.
    

2.3 r1+r2>d
     

  两圆间不存在内公切线.
    

***********************************************************

***********************************************************

下面的VBA程序是用上面的理论求解两圆公切线的简单小例子。

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-5-28 09:46 | 显示全部楼层
本帖最后由 作者 于 2007-5-28 10:02:29 编辑

因为有162400字节的限制,只好分3次发表。

而且发表的帖子会在句子的中途自动变行?要调整好几次才可以?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 04:52 , Processed in 0.345819 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表