- ベストアンサー
線分と楕円が交差する条件
同じカテゴリに度々すみません。 線分と楕円の交差する条件判定も 必要になってしまいました。(最後です) 楕円のデータとしては矩形でもっていて (px1,py1)-(px2,py2)の長方形の中に収まる楕円です。 その値を(cx - x)^2 / a + (cy - y)^2 / b = 1 へ変換し http://oshiete1.goo.ne.jp/kotaeru.php3?q=673382 の回答を参考にして内部に線分の端点がある場合の判定はできました。 しかし先端の間に楕円がきた場合はお手上げ状態です。 線分と楕円が交差する条件についてご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 > d=abs((ay2-ay1) *x1+(ax1-ax2)*y1+(ay1*ax2-ax1*ay2 ))/sqrt((ay2-ay1) ^2+(ax1-ax2)^2)・・・(1) > (ax2-ax1)(x1-ax1)+(ay2-ay1)(y1-ay1)>0・・・(2) > (ax1-ax2)(x1-ax2)+(ay1-ay2)(y1-ay2)>0・・・(3) > この 3式の > x1をx1 / |px2-px1| > y1をy1 / |py2-py1| > に置き換えたので宜しいのでしょうか? それでいいと思います。 他のやり方としては、線分の方程式はtを媒介変数として x=(ax2-ax1)t+ax1, y(ay2-ay1)t+ay1 (0≦t≦1) と表せますから、これを楕円の方程式に代入して、 tの解が0から1の範囲にあるかどうかを調べる手もあります。
その他の回答 (2)
- keyguy
- ベストアンサー率28% (135/469)
既に気づいているかもしれませんが円の問題で間違った回答をしていたのであれで解いてはいけません。 あれは少なくても1つの端点が円内部に有る場合です。 両方とも外にある場合を想定してませんでした。 補足に回答の方法で解いてみると書いてありましたが間違いなのでしないでください。 無視してください。 楕円も1と同じようにできると思います。
お礼
わざわざのご指摘有難うございます。 端点(x,y)が含まれるかどうかは (x - x1)^2 / a^2 + (y - y1)^2 / b^2 <= 1 で判定しているのですが、 両方とも外にある場合がどのようにすればよいのかが、わかりません。
補足
とりあえず・・・ (x1 - x)^2 / a^2 + (y1 - y)^2 / b^2 = 1 の楕円の式に 接線の直線の式y = mx + b をあてはめ、 判別式から解をもつか判定 解を持つなら 交点を求めて、その座標が線分の範囲内にあるかで 判定しようかと思います。 (果たして可能だろうか、、)
- ranx
- ベストアンサー率24% (357/1463)
Y座標を|px2-px1|/|py2-py1|倍すると円になります。 この座標変換を行っても、直線は直線のままですし、 交わるかどうかということも保存されます。
お礼
いつもご回答有難うございます。 つまり d=abs((ay2-ay1) *x1+(ax1-ax2)*y1+(ay1*ax2-ax1*ay2 ))/sqrt((ay2-ay1) ^2+(ax1-ax2)^2)・・・(1) (ax2-ax1)(x1-ax1)+(ay2-ay1)(y1-ay1)>0・・・(2) (ax1-ax2)(x1-ax2)+(ay1-ay2)(y1-ay2)>0・・・(3) この 3式の x1をx1 / |px2-px1| y1をy1 / |py2-py1| に置き換えたので宜しいのでしょうか?
お礼
結局現在は、判別式と解の公式を利用しています。 後でranxさんの方法でのやってみたいと思います。 再度のご回答ありがとうございました。