• ベストアンサー

3次元空間内での線分の交差判定について

ametsuchiの回答

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.7

motsuanさん、アドバイスありがとうございます。 >外積を直接とっちえばいいものを ..中略...のような周りくどいことをやらないと 答えがもとめられないのかちょっと不思議に思います 一般に外積計算は内積計算に比べて「コストのかかる」計算であり、なるべく使わないようにしているだけです。motsuanさんのやり方の分かり易さや、「外積計算」の有用性については百も承知しているつもりです。 もし、私のやり方の方が「コストのかかる」計算であったなら、折角今回初めて「専門家」を自称したのにおハズカシい限りで、訂正させてもらいます。 motsuanさんのやり方も私がいう「一般性のある」やり方で、敬意を表します。3D幾何計算ライブラリなどでは直線(線分)同士は、「交点」ではなく「最近点」として求めるのが普通です。

yosizo
質問者

お礼

返事が遅くなり、失礼しました。 詳しい解説、ありがとうございます。 >3D幾何計算ライブラリなどでは直線(線分)同士は、「交点」ではなく「最近点」として求めるのが普通です。 そうなんですか、しりませんでした。勉強になります。 今回の皆さんの回答を参考にしてプログラムに落とし込んでみます。

関連するQ&A

  • 線分の交点の保持

    いつもお世話になってます。 2つ以上の線分が2次元上にあって、線分が交差した場合それぞれの交点を保ちながらも移動し、交点で回転しながら他の線分とも衝突判定を行う、というアルゴリズムを考えているのですがなかなかうまくいかず悩んでいます。 最終的にはたくさんの線分がくっついて、くねくねしながら移動するようなイメージです。 速度を同じにして、交点を軸に回転させてみたのですが、3本目の線分が交差したときうまくいかなくなってしまいました・・。 ぜひ皆さんの力を貸してください。よろしくお願いします。

  • ★点と線分の距離??★

    いつもお世話になっています。 プログラミングで困っています。どなたか基本的な数学からご教授ください。 (1)線分ABに対して点Pから垂線を下ろすことが出来るかどうかの判定をするには? (2)垂線と線分との交点の座標を求めるには? (3)垂線と線分の交点の距離を求めるには これらの処理を出来るだけ早く処理したいのです。 あと、確認なのですが 「線分に垂線を下ろすことができるのであれば、その交点が点に最も近い」 でいいのですよね。 よろしくお願いします。

  • 3次元空間上の2点を結ぶ線分の中点を知りたい

    3次元空間上の点A(x1, y1, z1)と点B(x2, y2 z2)を結んで出来る線分の中点を知りたいのですが、 完全な文系出身であまり数学に詳しくないため、公式の見方がよくわかりません。 Wikipediaの中点のページにあるn次元ユークリッド空間上の中点の公式がそれのようですが、 「n 次元ユークリッド空間上の2点 A, B を直交座標系であらわし、それぞれを (a0, ..., an-1), (b0, ..., bn-1) とすると」 の時点ですでに理解できないので、単純な公式で教えて下さると助かります。

  • 次元と次元空間

    ふと思ったのですが物理で多次元って いうのがあるようなのですが あれは多次元空間のことを言ってる のですか? 例えば超ひも理論は10次元?とか 聞きますが それら10個の軸は 互いに内積0の関係にある10次元空間内の 理論なんでしょうか? 以前 水素原子モデルの電子運動を 計算したのですがそこでは11次元が 出てきて、その次元要素は確か 位置の3次元 軌道角運動量の3次元 角運動量の3次元 スピン角運動量の2次元 の3+3+3+2=11で 3次元空間内での11次元表記と 理解したのですが超ひもとかも こんな感じなんでしょうか? できれば 実際に計算で理解された方の 回答がほしいです

  • 3次元空間におけるアフィン変換について

    3次元空間で直線を軸とした回転運動している物体の座標の特定をしたいと考えています。 最終的にX、Y、Z軸を軸とする回転角度を得ることができればと思っています。 具体的に以下のような数学の問題があったとして、 どう解いていくかを経緯も含めて教えていただきたいのです。 [設問] 3次元空間に点A(x,y,z) = (0,0,0)と点B(100,-100,100)の2点がある。 また直線ABに含まれない点C(50,-50,0)がある。 点Cを含み直線ABに直交する平面と直線ABとの交点をDとし 点Cが線分CDを半径として当該平面上の円を一定の速度で回転している。 このとき点Cの円周上の回転角度をaとする時、 点Cのx、Y、Z軸それぞれを軸とした回転角度をaを用いて表しなさい

  • 線分同士の交点の判定

    線分の交差判定についてネットで調べていたら、以下のような処理で できると書かれていたページがあったのですが、どうしても理解する事が できません。 もしできれば、解説を頂いてもいいでしょうか。 よろしくお願いします。 //2次元での線分と線分の交差判定と交点 BOOL CheckCrossLine(CONST D3DXVECTOR2* pvA1,           CONST D3DXVECTOR2* pvA2,           CONST D3DXVECTOR2* pvB1,           CONST D3DXVECTOR2* pvB2,           D3DXVECTOR2* pvOut) { D3DXVECTOR2 v1 = *pvA1 - *pvB1; D3DXVECTOR2 vA = *pvA2 - *pvA1; D3DXVECTOR2 vB = *pvB2 - *pvB1; if (*pvA1 != *pvA2) ; else return FALSE;//線分が点のときは交差していないとする if (*pvB1 != *pvB2) ; else return FALSE;//線分が点のときは交差していないとする FLOAT fDeno = vA.x * vB.y - vA.y * vB.x;//外積の長さ //分母が0で、平行なときは if (fDeno != 0.0f) ; else return FALSE;//交差していないことにする FLOAT t = (v1.y * vB.x - v1.x * vB.y) / fDeno; FLOAT s = (v1.y * vA.x - v1.x * vA.y) / fDeno; if (t < 0.0f || t > 1.0f || s < 0.0f || s > 1.0f) return FALSE;//交差していない else { //交点を返す pvOut->x = vA.x * t + pvA1->x; pvOut->y = vA.y * t + pvA1->y; return TRUE;//交差 }

  • 3つの線分は、同じ点で交わることをベクトルを用いて示す問題について

    「四面体ABCDがある。互いにねじれの位置にある辺の中点を結ぶ3つの線分は同じ点で交わることを示せ。」 という問題があり、この正解答として掲載されている解法が理解できません。 その解法の流れは、 まずAB、CDの中点をP、Qとしたとき、PQの中点の位置ベクトルを求め、同様にその他のねじれの位置にある辺の中点を結ぶ辺の中点を求め、結果的にその中点は同じ位置ベクトル「($a+$b+$c+$d)/4」($はベクトル記号とする)であるから同じ点で交わる。 としていますが、僕にはPQの「中点」が交点だという推測ができません。 なぜ「交点」はねじれの位置にある辺の中点を結ぶそれぞれ辺の「中点」だと事前に推測できるのですか? その点について整理したいです。お手数ですが、そのための助言などをしていただきたいです。 よろしくお願い致します。

  • 多角形の自己交差を判定するには?

    3D空間にある平面多角形で、頂点が1000個ぐらいの多角形を想定しています。 これの多角形の辺同士で交点の有無により、自己交差を判定すると時間がかかってしまいます。 もっと、効率の良い方法はありますか?

  • 線分と線分が交わる条件を簡単に求める方法ってないでしょうか?

    線分と線分が交わる条件を簡単に求める方法ってないでしょうか? 線分が2つ(8つの値)があります (ax1,ay1)-(ax2,ay2) (bx1,by1)-(bx1,by1) この8つの値の大小関係だけで交差するかどうかの判定って 可能でしょうか? 直線の式y = ax + bを2つをわりだし その解がそれぞれの線分の範囲内にあるかで求めていたのですが 線分の数が多いためパフォーマンスに影響がでてきてしまいました。 (C言語で計算させています。) 数学は苦手なので、困っております。 或いは良い案があればお願いします

  • 2つの線分の最短距離

    2つの線分の衝突判定をして、そこから色々な形の当たり判定を作っていこうと思っているのですが・・・ 3次元上で、タイトルのものをどう計算して出したらいいのか分かりません。 本もいくつか読んでみましたが、数式しか載っていなくて、プログラムでどう表現したらいいのか・・・ ご教授願います。