pythonの関数、引数、戻り値の使い方を教えて下さい。
おすすめの参考のページを教えてもらうと助かります。
もっと短くなると、思います。
よろしくお願いします。
「離れている場合のみ ・・・ 接線は4本」
のところ、以下のプログラムは、1本のみ計算
r1r2の大小が関係するかもしれません。r1<r2を想定しています。
(参考)2つの円の共通接線を求める
https://qiita.com/tydesign/items/0100c49c6335695e6990
# 【例】中心(10,12) 半径2と中心(50,42) 半径30の円の共通接線を求める
from sympy import *
var('x1 y1 r1 x2 y2 r2 tx ty co si sx1 sy1 sx2 sy2')
sx1=0
sy1=r1
sx2=sqrt((x1-x2)**2+(y1-y2)**2-(r2-r1)**2)
sy2=r2
v=solve([co*sx1-si*sy1+tx-x1,
si*sx1+co*sy1+ty-y1,
co*sx2-si*sy2+tx-x2,
si*sx2+co*sy2+ty-y2],
[co,si,tx,ty])
A=Matrix([
[v[co],-v[si],v[tx]],
[v[si], v[co],v[ty]],
[ 0, 0, 1]
])
B=Matrix([
[sx2],
[ 0] ,
[ 1]
])
AB=A*B
print("---------------------------------------")
print(tx)
print(ty)
print(AB[0])
print(AB[1])
print("---------------------------------------")
print(v[tx].subs({x1:10,y1:12,r1:2,x2:50,y2:42,r2:32}),
v[ty].subs({x1:10,y1:12,r1:2,x2:50,y2:42,r2:32}))
print(AB[0].subs({x1:10,y1:12,r1:2,x2:50,y2:42,r2:32}),
AB[1].subs({x1:10,y1:12,r1:2,x2:50,y2:42,r2:32}))#
結果途中省略
10 10
50 10