- ベストアンサー
楕円と直線の交点を求めるには
<楕円> 原点座標:(DX,DY) X軸の半径:a Y軸の半径:b 角度:なし <直線> 始点座標:(SX,SY) 終点座標:(EX,EY) この2つの図形が交わるかどうか、また交わる場合にはその交点の座標を知りたいのです。 「楕円の方程式」「直線の方程式」「解の公式」を使用して手で計算することはできるのですが、 計算式として表すことができません。(中学レベル程度の知識なので・・・) EXCELで数式を設定したいので、上の変数名を使用した具体的な計算式を教えていただければありがたいです。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
手で計算できるなら、Excelで計算することは十分可能と思われますが・・・ ポイントは、解の式を、いきなり与えられた文字で表そうとするのではなく、 ・線分の式の係数 ・線分の式を楕円の式に代入してできる2次方程式の係数 をそれぞれ算出するようにすれば、無理はないのではないでしょうか? 具体的には、 線分の式をy=mx+nとすれば、m=(EY-SY)/(EX-SX), n=SY-m*SX 楕円に代入すると、(x-DX)^2/a^2+(mx+n-DY)^2/b^2=1 これを整理して、px^2-2qx+r=0とすれば、 p=(1/a^2)+(m^2/b^2) q=(DX/a^2)+((DY-n)/b^2) r=(DX^2/a^2)+((DY-n)^2/b^2)-1 解は、x=(q±√(q^2-pr))/p このm,n,p,q,r,(2つの)xをEXCELで書くのはなんとでもなりませんか? あとは、SX<=x<=EXに含まれるかを判定すればよいでしょう。 もちろん、q^2-pr<0の場合は、即「交点なし」です。 手で計算するのと、ほんと同じでしょう?
その他の回答 (6)
- kony0
- ベストアンサー率36% (175/474)
#2の補足について、私が計算間違いをしておりました。(mの掛け忘れ) ただし、符号の正負に若干あわなさそうなところもあるような気もしなくもないのですが・・・ 計算間違いしたこともあって、すっかり自信なくしてしまっておりますので、すみませんが、符号についてだけ再度ご検討ください。
お礼
>計算間違いしたこともあって、すっかり自信なくしてしまっておりますので、 いえいえヒントを与えていただいただけでも助かりました。ありがとうございました。
- mmky
- ベストアンサー率28% (681/2420)
質問者及びNo5さんの指摘のとおりです。 始点座標:(SX,SY) 終点座標:(EX,EY) 2点を通る直線の式は、 y=mx+n ・・(1) これを(Dx,Dy)で変換すると (y-Dy)=m(x-Dx)+N ・・(2) (1)から(2)を引く Dy=mDx+n-N n=Sy-mSx N=mDx+Sy-mSx-Dy=m(Dx-Sx)+(Sy-Dy) Y=mX+N, N=m(Dx-Sx)+(Sy-Dy)・・(3) (3)式が座標を楕円の原点にあわせたものです。 X^2+r^2×Y^2 =a^2 X^2+r^2×(mX+N)^2 =a^2 X^2+r^2{m^2X^2+2(mXN)+N^2}=a^2 X^2(1+r^2×m^2)+2X(mNr^2)+(N^2-a^2)=0 ここで、 A=(1+r^2×m^2), B=(mNr^2),C=(N^2-a^2) と置けば、 AX^2+2BX+C=0 の2次方程式になります。 これを解けば解がでます。 解の判定条件は√(4B^2-4AC)>0 #4は、N=m(Dx-Sx)+(Sy-Dy)=0 の場合です。 以上 補足と訂正まで
お礼
確かにこの方法だともっと式がすっきりしますね。 ありがとうございました。 ※ただ C=(r^2*N^2-a^2) だと思うのですが、これは単純にr^2がぬけてしまったのでしょう・・・
- kony0
- ベストアンサー率36% (175/474)
>mmkyさん #4で、平行移動した座標系(X,Y)を考えたときに、線分の方程式がY=mXにならないのでは? これだと、線分(またはその延長)が、(DX,DY)を通ることを仮定していることになりませんか?
- mmky
- ベストアンサー率28% (681/2420)
簡単にすればよいのでは、原点座標:(DX,DY) が複雑にするのですから X=(x-Dx)Y=(y-Dy)の形にするとX,Yで原点を(0.0)にして考えることが出来ます。これで楕円の式は X^2+r^2×Y^2 =a^2 , r=a/b (1)と簡略化出来ます。一方 直線の方程式は、Y=mX ,m=(EY-SY)/(EX-SX), (2)(No2さんから)mは傾きですので、座標に関係なく -∞<m<+∞ の変数として考えられますね。 (2)を(1)に代入すると X^2+r^2×(mX)^2 =a^2 (3)になります。 これでXが解けますね。X^2=a^2/{1+ (mr)^2} または X=±a/√{1+ (mr)^2}, これから xとyは x=X+Dx, y=Y+Dy として交点座標が決まります。 一方、楕円と直線が交わるかどうかは、(判定手段として)Xが実数になることが条件、これから、1+ (mr)^2>0 だから -1<(mr)^2 <+∞ であれば楕円と直線は交わります。 こんな感じですかね。
補足
直線の方程式は Y=mX+n ではないですか? 楕円の原点を移動させるとなると、この n の部分も同時に変化させなければいけないと思うのですが・・・
- acacia7
- ベストアンサー率26% (381/1447)
ちょっと追加情報。 アフィン変換について・・ 今回の件でどんな変換をするかというと・・ 「原点の移動」と「たて横の伸縮」の二つです。 (x',y')=((x-DX)/a,(y-DY)/b)・・・です。 見ての通りの式ですから逆変換は (x,y)=(ax'+DX,by'+DY)・・・です。 さて、アフィン変換を経て、問題の楕円は半径1の円になることがわかると思います。 そして、始点、終点はそれぞれ(SX',SY')と(EX',EY')です。 交わるかどうかの場合わけは、 原点からのそれぞれの距離で決めます。 ・ともに距離1未満ならば交点無し。 ・一つが距離1以上、一つが距離1未満であれば交点は一つ。 ・ともに距離が1より大きい場合は・・ ・・まず、二点がのる直線と原点との距離から考えて、 ・・・直線が1より離れている場合、は交点無し。 ・・・・距離が1以下の場合は・・ちょっと複雑になりますなぁ・・・・・・
補足
すみません「アフィン変換」自体が分からないので・・・ ただ、#2の方の回答でうまくいきそうです。 ありがとうございました。
- acacia7
- ベストアンサー率26% (381/1447)
XY軸にそった楕円っていうことならば・・ それこそ、半径の長さで割り算しちゃって、原点の位置に移動して、 <アフィン変換>・・といっても今回は回転がないですが・・ 移動された、線分と半径1の原点を中心とした円との交点を求めてみたらどうでしょう? その後逆にアフィン変換すれば良いのでは?
補足
>ポイントは、解の式を、いきなり与えられた文字で表そうとするのではなく、 その通りですね。いきなり表そうとしていたため、複雑な式になってしまい 途中で分からなくなってしまっていました。 もう一度落ち着いて計算しなおしたらうまくいきました。 ただ私の計算では、q=(m*(DY-n))/b^2-(DX/a^2) になるのですが? CADを使っていくつかのパターンで検証してみましたがうまくいっている ようなのですが・・・