• ベストアンサー

線分と円が交差する条件

線分と円(6つの値)があります 線分:(ax1,ay1)-(ax2,ay2) 円:中心(x1,y1)半径r この6つの値から 線分が円に含まれる、或いは円と交差する条件を判定したいのですが まるで検討がつきません。 円の式は (x - x1)^2 + (y - y1)^2 = r^2 でしょうか。(自信無し) リアルタイムにコンピューターで計算するため 出来れば少ない計算量で計算させたいのですが。。。 宜しくお願い致します。

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

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

>円の式 (x - x1)^2 + (y - y1)^2 = r^2 でOKだと思います 説明のため点に名前をつけます P(ax1,ay1) Q(ax2,ay2) R(x1,y1) RPベクトル=p RQベクトル=q さて、線分が円に含まれるor円と交差する条件ですが  1. PかQが円に含まれるとき→条件を満たす  2. 1.以外のとき   2-1.RからPQに垂線RHを下ろし、その長さがr以下   2-2.角PQRと角QPRがともに鋭角 1.のとき、線分が円に含まれることは自明だと思います 2.の条件を満たせば線分が円と2つの交点を持つはずです 1.  PR<=r or QR<=r 2. 2-1. 直線P1P2の式 y-ay1=(x-ax1)(ay2-ay1)/(ax2-ax1)  注 P1をとおり傾きが(ay2-ay1)/(ax2-ax1)の直線 整理すると Ax+By+C=0  A=ay2-ay1  B=ax1-ax2  C=ay1*ax2-ax1*ay2 こうなります。 この直線とQとの距離dは  d=abs(A*x1+B*y1+C)/sqrt(A^2+B^2) となります。 このdを用いると求める条件は  d<=r (直線と円が交わるor接する) 2-2.  PQベクトルとPRベクトルの内積>0 かつ、   QPベクトルとQRベクトルの内積>0  従って、  (q-p)・(-p)>0  (p-q)・(-q)>0  ベクトル表記を止めると  (ax2-ax1)(x1-ax1)+(ay2-ay1)(y1-ay1)>0  (ax1-ax2)(x1-ax2)+(ay1-ay2)(y1-ay2)>0 なにぶん急いで計算したので、一応検算はしてください 2次元ベクトル管理用のクラスを作ると楽かも

sha-girl
質問者

お礼

ご回答ありがとうございます。 教えてくださったやり方で出来ました。

その他の回答 (2)

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.3

問題の趣旨を間違っているときのために 交差するあるいは含まれる条件 (ax1-x1)^2+(ay1-y1)^2≦r^2 または (ax2-x1)^2+(ay2-y1)^2≦r^2

sha-girl
質問者

お礼

既に1さんの回答でプログラムを組んでしまいましたが keyguyさんの計算方法でも今後参考にしたいと思います。 ご回答感謝しております。

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.2

1でいいのかもしれませんが読む私の能力に難があるので分かりません。 私なりの回答を 含まれる条件 (ax1-x1)^2+(ay1-y1)^2≦r^2 かつ (ax2-x1)^2+(ay2-y1)^2≦r^2 交わる条件 「(ax1-x1)^2+(ay1-y1)^2≦r^2 かつ r^2≦(ax2-x1)^2+(ay2-y1)^2」 または 「r^2≦「(ax1-x1)^2+(ay1-y1)^2 かつ (ax2-x1)^2+(ay2-y1)^2≦r^2」 なお×だけでなくTも交差としました。 ×だけの場合は容易く作れますね。