• ベストアンサー

次の図形中の線分の長さを方程式を使わずに求めるにはどうすればよいのでしょうか。

次の図は座標ABCDを結ぶ図形に線分ABと線分CDが内接した円を持つ図である。 定義されている条件 A,B,C,Dの座標 円の半径 ∠ABC,∠BCDの大きさ O1,O2はABCDと円との交点であり、線分PO1,PO2はそれぞれAB,CDに垂直に交わる。 求めたい部分 線分O1-B,C-O2の長さ AB,CDの延長線上の交点から求める方法で解けそうなのですが、 今回それとは別の方法で、連立方程式を用いない解法を探しております。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#227064
noname#227064
回答No.1

> AB,CDの延長線上の交点から求める方法で解けそうなのですが、 > 今回それとは別の方法で、連立方程式を用いない解法を探しております。 どこまでできたかを記載していただかないと問題の丸投げかと思われてしまい回答がつきません。 (最悪削除されることもあるので・・・) が、少し面白そうな問題でしたので解いてみました。 話を簡単にするために、A~Dの座標をそれぞれ A (0, 0) B (xB, 0) C (xC, yC) D (xD, yD) とし、円の半径をr、線分O1-Bの長さをmとおきます。 円の方程式は、 (x-(xB-m))^2+(y-r)^2 = r^2 直線CDの方程式は、 y = (yC-yD)/(xC-xD)*x+(xC*yD-yC*xD)/(xC-xD) = a*x+b (傾きをa、切片をbとおいた) となります。 点O2において傾きがaであることから、円の上半分の方程式を微分すると傾きaと一致するので、 d/dx*{√[r^2-(x-(xB-m))^2]+r} = -(x-(xB-m))/√[r^2-(x-(xB-m))^2] = a これを変形すると、 (x-(xB-m))^2 = a^2r^2/(1+a^2) となり、円の方程式に代入してO2のy座標を求めます。 a^2r^2/(1+a^2)+(y-r)^2 = r^2 O2のy座標は正の値なので y = r/√(1+a^2)+r 直線の方程式にこれを代入してx座標を求めます。 x = (r/√(1+a^2)+r-b)/a これでO2の座標が求められたので線分C-O2の長さが求められます。 O2の座標が求まりましたのでこれを(xO2, yO2)とおいて、円の方程式に代入すると、 (xO2-(xB-m))^2+(yO2-r)^2 = r^2 これをmについての式に変形すれば m = √(2r*yO2-yO2^2)-xO2+xB となり線分O1-Bの長さが求まります。 求める解法とは違うかもしれませんが参考にしてください。

standonend
質問者

お礼

現在求めようとしているものは A-Dへ接する円を通った場合、ABCDと通るよりどのくらい距離を短くすることが出来るのか、ということです。 延長線上でAB,CDが交わる点(以下、Eとおく)を求めて、∠O1EPの大きさと半径からO1-Eを求め、それにB-Eを引いた値で求めることが出来たのですが、Eを出すために方程式の要素が入ってしまうため、それを使わない別の方法があるのか探しておりました。 途中微分を使うことにはきがつきませんでした。 非常に助かりました。ありがとうございます。 それと、非常にわがままであるのですが、 ABに傾きがついた(B=(xB,xY))のときはどのように変わるのでしょうか。 よろしくお願いします。

その他の回答 (1)

noname#227064
noname#227064
回答No.2

> ABに傾きがついた(B=(xB,xY))のときはどのように変わるのでしょうか。 A~Dの座標が A (0, 0) B (xB, yB) C (xC, yC) D (xD, yD) とした場合、 A (0, 0) B (xB', 0) C (xC', yC') D (xD', yD') となるようにAを中心に回転させて、後は回答番号No.1のように計算するだけです。 sinθ= yB/√(xB^2+yB^2) cosθ = xB/√(xB^2+yB^2) として、回転後のB~Dの座標を計算すると xB' = xB*cosθ+yB*sinθ = √(xB^2+yB^2) yB' = -xB*sinθ+yB*cosθ = 0 xC' = xC*cosθ+yC*sinθ yC' = -xC*sinθ+yC*cosθ xD' = xD*cosθ+yD*sinθ yD' = -xD*sinθ+yD*cosθ となります。

standonend
質問者

お礼

なるほど。傾けて求めるんですね。 謎が解けてすっきりしました。これで目的のプログラムも作れそうです。 本当にありがとうございました。

関連するQ&A