接線ネタその2〜somemさんのブログでは2円間の接線について話されていましたので、Script!3D で円間接線を作図してみます。先日の点〜円接線のロジックが一部で使えます。

スケッチアップに送ります。

こんな感じです。
// 円間接線実行します。
#VAR
cx1 = -20 ;*円1中心X座標
cy1 = -30 ;*円1中心Y座標
cr1 = 25 ;*円1半径
cx2 = 100 ;*円2中心X座標
cy2 = 120 ;*円2中心Y座標
cr2 = 75 ;*円2半径
px // 小さい方の円中心点
py
cx // 大きい方の円中心点
cy
cr
cra // 小さい方の円半径
crb // 大きい方の円半径
n
w1
w2
d ;2円中心点間の距離
a1 //小円中心点から大円中心点への角度[rad]
ad1 ;小円中心点から大円中心点への角度[°]
a2 //接点への角度[rad]
ad2 ;接点への角度[°]
l ;接点への距離
sx1 // 小円接点1
sy1
sx2 // 小円接点2
sy2
sx3 // 大円接点1
sy3
sx4 // 大円接点2
sy4
#DRAW
#IF (cr1 < cr2)
CAL px = cx1
CAL py = cy1
CAL cx = cx2
CAL cy = cy2
CAL cr = cr2 - cr1
CAL cra = cr1
CAL crb = cr2
#ELSE
CAL px = cx2
CAL py = cy2
CAL cx = cx1
CAL cy = cy1
CAL cr = cr1 - cr2
CAL cra = cr2
CAL crb = cr1
#END
GETDIST2D d,cx1,cy1,cx2,cy2
CAL w1 = cx - px
CAL w2 = cy - py
GETANGLE2D a1,w1,w2
CAL ad1 = a1*180/PI
CAL a2 = ASin(cr/d)
CAL ad2 = a2*180/PI
CAL l = Sqrt(d*d-cr*cr)
//
CAL w1 = a1+a2+0.5*PI
CAL sx1 = px + cra*Cos(w1)
CAL sy1 = py + cra*Sin(w1)
CAL sx3 = cx + crb*Cos(w1)
CAL sy3 = cy + crb*Sin(w1)
CAL w1 = a1-a2-0.5*PI
CAL sx2 = px + cra*Cos(w1)
CAL sy2 = py + cra*Sin(w1)
CAL sx4 = cx + crb*Cos(w1)
CAL sy4 = cy + crb*Sin(w1)
//
PEN 1
CIRCLE2D n,SetArcSep,cx1,cy1,cr1
PEN 2
CIRCLE2D n,SetArcSep,cx2,cy2,cr2
//
PEN 3
LINE2D n,sx1,sy1, sx3,sy3
PEN 4
LINE2D n,sx2,sy2, sx4,sy4
//
PEN 5
CIRCLE2D n,SetArcSep,sx1,sy1,3
CIRCLE2D n,SetArcSep,sx2,sy2,3
PEN 6
CIRCLE2D n,SetArcSep,sx3,sy3,5
CIRCLE2D n,SetArcSep,sx4,sy4,5

スケッチアップに送ります。

こんな感じです。