- 締切済み
平面図形が解けません。
半径ar、中心点A(a1,a2)の円Aがあります。 その中心をを通る直線mがあります。 その直線上の任意の点を点B(b1,b2)とします。 また、円Aに内接し、中心(x,y)が直線m上にあり、 半径crの円Cがあります。 円Bの中心(x,y)を解いてください。 (言い方がおかしいですが、、、) 何がしたいかというと、 マウスを動かして、その目玉が追跡するということですが、、、。 自分で考えていたら混乱しました。 sin,cos可だと思います。 要素で足りないものがあれば補足します。 できれば、簡素なものがいいです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- stomachman
- ベストアンサー率57% (1014/1775)
黒目(円C)が目玉(円A)に内接しているとき、黒目の中心(x,y)は、点A=(a1,a2)を中心とする半径(ar-cr)の円(これを円Dとしましょう)の円周上にあります。 (1) マウスのカーソル点B=(b1,b2)が円Dの中にある場合には、黒目(円C)の中心が点Bと一致している、ってのは如何でしょう。このときには黒目は目玉の中にあるけれども、内接してはいない。 それでオッケーであれば、 もし(b1-a1)^2+(b2-a2)^2 ≦ (ar-cr)^2 ならば (x,y)=(b1,b2) (ここで、^2 は、二乗する、って意味です。) とすれば良い。 (2) マウスのカーソル(b1,b2)が円Dの外にある場合: (x,y)はまた、直線m上にあります。 直線mは点B=(b1,b2)と点A=(a1,a2)を通っています。 んですから、直線mと円Dの交点を求めればよい。 原点を(a1,a2)にずらした座標系(X,Y)で考えれば簡単です。つまり (X,Y)=(x-a1,y-a2) という変換をしてやると、 点A=(0,0) 点B=(b1-a1,b2-a2) 円D= {(X,Y) | X^2+Y^2=(ar-cr)^2} ですから、連立方程式 X^2+Y^2=(ar-cr)^2 …(イ) k X=(b1-a1) …(ロ) k Y=(b2-a2) …(ハ) を満たすX,Y,kを求める問題です。 (イ)の両辺を(k^2)倍してみると (k X)^2+(k Y)^2=(k^2)((ar-cr)^2) であるから(ロ)(ハ)を代入して (b1-a1)^2+(b2-a2)^2=(k^2)((ar-cr)^2) ここで、黒目は目玉より小さい。つまり(ar-cr)>0なんだから、両辺を((ar-cr)^2)で割ることができて (k^2)=((b1-a1)^2+(b2-a2)^2)/((ar-cr)^2) となる。両辺の平方根(sqrt)をとれば、kが決まります。 k=sqrt(((b1-a1)^2+(b2-a2)^2)/((ar-cr)^2)) そして(2)の条件から、k>1である。だからk=0になることはないんで、kを分母にしても大丈夫。 X=(b1-a1)/k Y=(b2-a2)/k 最後に、原点をずらしてあったのを元にもどして、 x=X+a1 y=Y+a2 によって(x,y)が計算できます。 ●そうすると、(1)(2)を合わせて、 k=sqrt(((b1-a1)^2+(b2-a2)^2)/((ar-cr)^2)) if k ≦1 then (x,y)=(b1,b2) else (x,y)=((b1-a1)/k+a1,(b2-a2)/k+a2) これが「簡素」かどうかはなんとも言えませんが。 kony0さん、やっほー
- kony0
- ベストアンサー率36% (175/474)
ところで「目玉の動き」に忠実とするなら 線分ABを(ar-cr):Max{(l-ar+cr),0}の比に内分と考えたほうがよさげ。 #1の考え方だと、 ・AとBが一致する(l=0)のとき、「0割(#DIV/0!)」が発生 (対処法は、C=A(=B)とする) ・AとBが極めて近いとき(式でいうとl+cr<arのとき。つまり「マウスポインタの位置」Bを中心とした「黒目」を描いても、円Aの内部に包含されるとき)でも、「黒目」の中心はBの位置に来ない(ABの延長線上でかつ、「黒目」が「瞼」に内接する位置となる)
- kony0
- ベストアンサー率36% (175/474)
少々問題文を逸脱するかもしれません(問題文はいくつか問題定義不足がある)が、「マウスを動かして、その目玉が追跡する」に忠実にいくと・・・ 前提条件として、ar>crとします。(瞼>黒目です) また、線分ABの長さをlとおきます。 円Cの中心は線分ABを(ar-cr):(l-ar+cr)の比に[わける]点です。 [わける]とは、l-ar+cr>0のとき内分、l-ar-cr<0のときは外分。いずれにしても点の座標は統一的に式で表せます。
お礼
ありがとう。