電子書籍の厳選無料作品が豊富!

よろしくお願いします。
CAD上では円弧と線があり、その2つに接する円が簡単に描けますが、数式で表すとどうなりますか。
求めたいのは、接する円の中心座標です。円の半径は任意。
直線と円弧の式は既知とします。

A 回答 (3件)

 コンピューター上の文章には、数式が書き込み難いため、この回答においては、一部に累乗を「^」を用いて表したり、必要以上に括弧を増やしたりしております。


 そのままでは理解し難いと思われますので、紙面に数式を写し直したり、略図と座標軸を描く等をされた上で、理解を進められた方が、より判り易くなると思います。
 中心の座標が[x0,y0]で、半径がr0である円を表す式は、
(x-x0)^2+(y-y0)^2=r0^2・・・・・式(1)
になります。
 この円に接する半径rの円の中心点は、
(x-x0)^2+(y-y0)^2=(r0±r)^2・・・・・式(2)
で表される円上のどこかに存在します。(但し、右辺=(r0-r)^2の時、r≠r0)

 傾きがa、切片がb0である直線を表す式は、
y=ax+b0・・・・・式(3)
になります。
 この直線に接する半径Rの円の中心点は、接するべき直線を、間隔Rだけオフセットさせた平行線上のどこかに存在します。
 この平行線を表す式は、
y=ax+b0±R/√(a(a+1))・・・・・式(4)
になります。
 円と直線の双方に接する円の中心[x,y]は、式(2)、式(4)を同時に満たす位置にありますから、式(4)を式(2)に代入して、
(x-x0)^2+(ax+b0±R/√(a(a+1))-y0)^2=(r0±r)^2
0=(x-x0)^2+(ax+b0-y0±R/√(a(a+1)))^2-(r0±r)^2
=(a^2+1)x^2+2x(a(b0-y0)-x0±aR/√(a+1))+(b0-y0±R/√(a(a+1)))^2-(r0±r)^2・・・・・式(5)
 2次方程式である式(5)をxについて解くと、
x=(-(a(b0-y0)-x0±aR/√(a+1))±√((a(b0-y0)-x0±aR/√(a+1))^2-(a^2+1)((b0-y0±R/√(a(a+1)))^2-(r0±r)^2)))/(a^2+1)・・・・・式(6)
 式(4)、式(6)より
y=a(-(a(b0-y0)-x0±aR/√(a+1))±√((a(b0-y0)-x0±aR/√(a+1))^2-(a^2+1)((b0-y0±R/√(a(a+1)))^2-(r0±r)^2)))/(a^2+1)+b0±R/√(a(a+1))・・・・・式(7)
となります。

 x及びyの解は、Rの前にある±が+の場合と-場合、r>0の前にある±が+の場合と-場合、√((a(b0-y0)-x0±aR/√(a+1))^2-(a^2+1)((b0-y0±R/√(a(a+1)))^2-(r0±r)^2))の前にある±が+の場合と-場合、の各々の場合がありますから、2の3乗の、8通りの解があります。(数値としては|r|=|R|です)

 尚、CADで直線を引く際に、始点と終点を指定した場合、始点の座標を[x1,y1]、終点の座標を[x2,y2]とすると、
a=(y2-y1)/(x2-x1)
b0=y1-ax1=y1-x1(y2-y1)/(x2-x1)=y1-(y2-y1)/((x2/x1)-1)

 始点と角度を指定した場合、始点の座標を[x1,y1]、角度をθとすると、
a=tanθ
b0=y1-ax1=y1-x1(tanθ)
ですから、直線の指定の仕方によって、式(6)及び式(7)に代入するa及びb0の値を、変えられると良いと思います。
    • good
    • 0

作図で半径sの円を描く場合は、


「直線と距離がsだけ離れた直線」と「円弧と同じ中心で、半径がsだけ大きい円」を描いてその交点が求める円の中心になります。

座標計算の場合も同じ方法で計算できます。
直線の式を、ax+by=c
円弧の式を、(x-p)^2+(y-q)^2=r^2
とし、両方に接する円の半径をsとします。

「直線と距離がsだけ離れた直線」の式は、
ax+by=c±s√(a^2+b^2)
「円弧と同じ中心で、半径がsだけ大きい円」の式は、
(x-p)^2+(y-q)^2=(r+s)^2
この2つの式からx,yを求めれば、それが求める円の中心座標になります。

あとは面倒なので、ご自分で計算を。
    • good
    • 0

 求める円の中心から直線までの距離が円の半径に等しい


 円弧の中心と円の中心の距離が両者の半径の和に等しい

この両者を連立させればいいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!