プログラムを組んでいるのですが、困っています。

2線の斜線が、交差する点の求め方を教えて下さい。

A 回答 (6件)

 J-Jさんのご回答で求めることができますよね。


 ただし、これが「一般の2直線の交点を求める」ということであればもう少し慎重になる必要があります。問題を整理して、
 直線a:点a1(Xa1,Ya1)と点a2(Xa2,Ya2)を結ぶ直線
 直線b:点b1(Xb1,Yb1)と点b2(Xb2,Yb2)を結ぶ直線
とします。すると直線の傾きは、
 直線aでは A=(Ya2-Ya1)/(Xa2-Xa1)、
 直線bでは B=(Yb2-Yb1)/(Xb2-Xb1)
ですが、それぞれXa2=Xa1、Xb2=Xb1のときに零による除算が発生します。これを事前にチェックして対応する必要があります。
 さらに直線の傾きが等しいとき(A=B)についても同様のことが言えます。もっともこの場合には交点なしというコードを返すようにしないといけませんが。
 さらにさらに、これが直線ではなくて「2線分の交点を求める」という問題ならば、求めた交点が線分上にのっているかどうかも確認しなければいけません。
 汎用の交点を求める関数を作っておくのも今後のために悪くないと思いましたので蛇足回答をいたしました。
    • good
    • 0
この回答へのお礼

間違いなく計算値と実数値が合いました。
お世話様でした。
又、詳細説明有り難うございます。

又、困った時はよろしくお願いします。

お礼日時:2001/01/07 11:45

ベクトルと外積を使うときれいに解決するという話でしょう。



頂点a,b,cがあるとします。
ベクトルabとacの外積を求めると頂点cがベクトルabに対して右側にあるか
左側にあるかが外積の正負によって判定できます。

これと次のことから直線の交差を判定できます。

直線a1a2と直線b1b2が交わる

頂点a1と頂点a1が直線b1b2をはさんで反対側にある
かつ頂点b1と頂点b2が直線a1a2をはさんで反対側にある。

外積の計算方法はちょっと忘れてしまいました。
すいません。
    • good
    • 0
この回答へのお礼

申し訳ございません。
回答は出ているのですが、質問を閉じるのを忘れていました。

お礼日時:2001/02/17 00:45

コンピュータにやらせるなら、まず傾きを計算させて変数に入れてしまうといいんじゃないですか?


線aの傾きをA=(y13-y0)/(x12-x0)
線b の傾きをB=(y3-y11)/(x7-x4)とおくと、
求める座標(X、Y)は

X=(A*x0-y0-B*x4+y11)/(A-B)
Y={A*y11-B*Y0+AB*(x0-x4)}/(A-B)
で出ると思います。ちゃんと展開して約分すれば簡単になるのかもしれないけど。。。
適当に連立方程式を解いたので、自信はないです。
最後の式はゼロがあったほうが計算し易いのでa1 x0 y0 とb1 x4 y11 を使いましたが、もちろん、a2とb2でもだいじょうぶです。
x0 y0 のところは省いてもいいですが、一般形にならなくなるので一応書いときました。
    • good
    • 0
この回答へのお礼

間違いなく計算値と実数値が合いました。
お世話様でした。

又、困った時はよろしくお願いします。

お礼日時:2001/01/07 11:43

ある直線が点(x1,y1)と点(x2,y2)を通るとき、


y-y1 = (y2-y1)(x-x1)/(x2-x1)
となりますから、これを展開すれば y=ax+b の形に変形できます。
    • good
    • 0
この回答へのお礼

お世話様でした。

又、困った時はよろしくお願いします。

お礼日時:2001/01/07 11:52

#1のpunchan_jpさんの回答どおりだと思うので、計算してみました。



x = - (b1 - b2) / (a1 - a2)
y = (a1*b2 - a2*b1) / (a1 - a2)

ですね。
(中学の教科書に載ってますよ?)

こういうことではないのであれば、補足ください。

この回答への補足

座標値での計算方法を教えて下さい。

値は
線a
a1 x0 y0
a2 x12 y13
線b
b1 x4 y11
b2 x7 y3

補足日時:2001/01/05 21:44
    • good
    • 0
この回答へのお礼

お世話様でした。

又、困った時はよろしくお願いします。

お礼日時:2001/01/07 11:52

平面上での話でしょうか?


その2本の直線はどのように与えられるのでしょう?
y=ax+b の1次式で与えられるとすると、
y=a1x+b1
y=a2x+b2
の交点は、この二つの式を連立方程式と考えて、x,yについて解けば求まります。

この回答への補足

座標値での計算方法を教えて下さい。

値は
線a
a1 x0 y0
a2 x12 y13
線b
b1 x4 y11
b2 x7 y3

補足日時:2001/01/05 21:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q斜線A・BにLの距離P点に斜線に直角の線を描く方程式を教えてください。

斜線A・BにLの距離P点に斜線に直角の線を描く方程式を教えてください。
点A(Ax,Ay),点B(Bx,By)を結ぶ線上に、点Aから距離Lの位置、点P(Px,Py)に斜線に直角の線を描く方程式を教えてください。

Aベストアンサー

(1)Pを中心にして半径rの円を描きます。
(2)円と直線ABとの交点をC,Dとし、C,Dを中心とする半径R(R>r)を描きます。
(3)2つの円の交点E、Fを直線で結びます。

直線ABの傾きをmとすると
 m=(Ay-By)/(Ax-Bx)
点P(Px,Py)を通り、直線ABに垂直な直線の方程式は
y=Py+(-1/m)(x-Px)
です。座標を使う場合はこの方が普通です。

Q斜線ABに平行に、Lの距離離れた斜線CDの座標を求める方程式を教えてく

斜線ABに平行に、Lの距離離れた斜線CDの座標を求める方程式を教えてください。
斜線A(Ax,Ay),B(Bx.By)を平行にLの距離離れたC(Cx,Cy),D(Dx,Dy)の座標を求める方程式を教えてください。

Aベストアンサー

つまり、点ABCDで長方形を作るということですね。

線分ABの長さをMとすると、
(Bx-Ax)^2+(By-Ay)^2=M^2

線分ACの長さはLだから、
(Cx-Ax)^2+(Cy-Ay)^2=L^2
線分ABと線分ACは直角だから、
(Bx-Ax)*(Cx-Ax)+(By-Ay)*(Cy-Ay)=0

これらを解くと、
(Cx-Ax)^2*M^2=(By-Ay)^2*L^2
より、
Cx=Ax+(By-Ay)*L/M
Cy=Ay-(Bx-Ax)*L/M
または
Cx=Ax-(By-Ay)*L/M
Cy=Ay+(Bx-Ax)*L/M

点Dの座標は、
Dx=Cx+(Bx-Ax)
Cy=Cy+(By-Ay)

Q斜線A・BにLの距離P点に斜線に直角の線C・Dを描く方程式を教えてくだ

斜線A・BにLの距離P点に斜線に直角の線C・Dを描く方程式を教えてください。 点A(Ax,Ay),点B(Bx,By)を結ぶ線上に、点Aから距離Lの位置、点P(Px,Py)に斜線に直角の線を描く方程式を教えてください。

Ax=5000:Ay=4000
Bx=25000:By=22000

A点からP点まで距離 L=20000として
Px=19865.883:Py=17379.295

CD線の長さをL2=3000として
Cx=
Cy=
Dx=
Dy=
を求めたいのですが

Aベストアンサー

直線CDの方程式が知りたいのか、2点C、Dの座標が知りたいのか、どちらなのでしょうか?
わからないので両方書いておきます。

直線ABの傾きは、
(22000-4000)/(25000-5000)=9/10
従って、ABに直交する直線CDの傾きは、-10/9
よって、直線CDの方程式は、以下のように書けます。
y-Py=(-10/9)*(x-Px)

点Cと点Dの座標は、CP:PDを指定しないと求まりませんが……。
Cx=Px-(CPの長さ)* 9/√181
Cy=Py+(CPの長さ)*10/√181
Dx=Px+(PDの長さ)* 9/√181
Dy=Py-(PDの長さ)*10/√181

例えば、PがCDの中点の場合、以下のようになります。
Cx=Px-1500* 9/√181=18862.436
Cy=Py+1500*10/√181=18494.236
Dx=Px+1500* 9/√181=20869.330
Dy=Py-1500*10/√181=16264.354

Q斜線A・BにLの距離P点を求める方程式を教えてください。

斜線A・BにLの距離P点を求める方程式を教えてください。
点A(Ax,Ay),点B(Bx,By)を結ぶ線上に、点Aから距離Lの位置、点P(Px,Py)の座標を求める方程式を教えてください。

Aベストアンサー

線分ABの長さMは、
M=√{(Bx-Ax)^2+(By-Ay)^2}
点Pは線分ABをL:(M-L)に内分する点なので、
Px=Ax+(Bx-Ax)*L/M={(M-L)*Ax+L*Bx}/M
Py=Ay+(By-Ay)*L/M={(M-L)*Ay+L*By}/M

Q2線の交わる角度を求める式

2線の交わる角度を求める式で、0での除算が発生しない方法を教えて下さい。

座標
線a ax1 = 0 , ay1 = 0 : ax2 = 12 , ay2 = 13
線b bx1 = 6 , by1 = 15: bx2 = 6 , by2 = 2

A=(y13-y0)/(x12-x0)
B=(y2-y15)/(x6-x6)   0で除算が発生

2線の交わる角度
tanθ=(A-B)/(1+AB)

片方の線が垂直だと0で除算が発生しまい、うまく計算できません。
なにか他によい方法はないでしょうか。

Aベストアンサー

方向ベクトルの内積を考えて御覧なさい。

α = (ax1,ay1) - (ax2,ay2)
β = (bx1,by1) - (bx2,by2)
と置くと、2線の交わる角度 θ に関して、
α・β = |α||β|cosθ
が成立ちます。これで、cosθ の値が求まります。

cosθ の値から θ を求めるには、
よほど運が良くなければ、
関数電卓を使うことになるでしょう。

求まった θ は鈍角である可能性があります。
θ と π-θ のどちらが答えにふさわしいかは、
個々の例でよく考えて下さい。


人気Q&Aランキング

おすすめ情報