• ベストアンサー

3Dプログラミングでは何故2直線の交点を「最近点」として求めるのでしょうか?

http://oshiete1.goo.ne.jp/qa74647.html?ans_count_asc=0 こちらの質問で、 >3D幾何計算ライブラリなどでは直線(線分)同士は、「交点」ではなく「最近点」として求めるのが普通です。 とありますが、何故なのでしょうか? 確かに色々調べてみますと、交点ではなく2直線の距離を求めて、その距離が一定の閾値以下なら交差している、というアルゴリズムが多く見つかりました。 小数が有限なために完全に交差することは殆どないから・・・でしょうか?

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> 小数が有限なために完全に交差することは殆どないから・・・でしょうか? 交差することは殆どないからですが、その理由は小数が有限だからでは無いです。 例えば、 ・X軸 ・相当に単純な図形である(1, 1, 1 )の単位立方体(?) の12本の線分でさえ、交差しない線分が7本もあります。 ちょっと平行移動、回転するだけで、ほとんどの辺が交差しなくなります。 2Dの世界なら、ほとんどの直線と直線は交差するんですが。 同様に、3Dの世界ではほとんどの平面と平面は交差します。 汎用的に利用されるライブラリでは、指定されたほとんどの直線が交差するだろうなどという都合の良い前提を出すと、実際に使い物にならなくなるからです。 例) ・0~2πの引数しか与えられないであろうcos関数 ・同じ値が入っている事は無いであろうソート関数 ・割る数にゼロは指定されないであろう割り算、剰余関数

axsies
質問者

お礼

回答ありがとうございます。 よく考えてみれば、交点を求める前に2直線が交差しているかを調べなければなりませんね。 交差しているかを調べて交点を求めるよりも、 2直線の距離を求めた方が手っ取り早いし、応用が利く・・・ という事でしょうか。

関連するQ&A

  • 線分の交点の保持

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

  • 数学orアルゴリズムが得意の方(線分と線分の交点判別)

    C言語のアルゴリズムを勉強中です。 線分A(A(x1,y1),B(x2,y2))と線分B(C(x3,y3),D(x4,x4))が交差するかどうかを判別し、交差するのであればその交点P(X,Y)を求める。 また、その交点がどちらか一方の線分上にあるかどうかも判別したいのです。 一番効率よくやるにはどのようにすればよいでしょうか。 例えば 1、三角形の符号付き面積を使って交差するかどうかと各点が線分上にあるかどうかを判別し、その後交点を求める 2、とり合えず交点を求めてその交点が各線分内(上)にあるかどうかを判別 他にもたくさんありそうですがとにかく出来るだけ計算回数を減らしたいのです。(さっき求めた~~を~~するといったかんじで) 出来れば流れ全体を書いていただきたいのですが書き込むのが大変だと思うのでせめて使う判別式だけでも教えてください。 これが出来たら、 多角形と多角形の交点判別のアルゴリズムにも挑戦しようと思っています。 数学の得意な方、アルゴリズムを考えるのが好きな方 よろしくお願いします。

  • 点と直線

    xy平面上に3点A(-5、-1)、B(2,13)、C(6,1)がある。 (1)∠ABCの大きさを求めよ。 (2)∠BACの二等分線と線分BCとの交点Dの座標を求めよ。 私が求めた所AB=7√5、BC=4√10、CA=5√5になったのですが、三平方の定理を使ってみるときれいな直角三角形にならないですよね? (2)はまず、線分ABとACの方程式を求めました。そして∠BAC上にある点を(X、Y)とおいて、(X、Y)と2直線の距離が等しいという事を使って解いていきました。が、途中で混乱してしまいました。 もっと簡単な解き方があれば教えて下さい。

  • 3次元空間での2直線の交点の求め方

    悩んでおります.御力添えを願います. 以下の条件下にて,2つの直線式を求め,その交点を求めようとしております. 1.点p(a0,b0,c0)と点q(a1,b1,c1)の座標は既知. 2.点s(d,e,f)は,座標は未知であるが,点p,点qへ向けて2つの直線を延ばしており,それぞれの直線の傾きが既知. 以上の条件をもとに,点s(d,e,f)の座標を求めようとしています. 私の考えた手法は,以下の物ですが上手くいきません. 1.点sから伸びる2つの直線の方向余弦を求める. 例)vx = r * cosα,vy = r * cosβ, vz = r * cosγ (上記の様に2点へと伸びる直線の方向余弦をそれぞれ求める) 2.求めた方向余弦と,点p,点qを用いて2つの直線式を表す. 例)x = a0 + vx0 * t, y = b0 + vy0 * t, z = c0 + vz0 * t x = a1 + vx1 * s, y = b1 + vy1 * s, z = c1 + vz1 * s    3.誤差を考慮し,2直線間の距離が1番小さくなる2点を求める. 例)(距離)^2 = {a0 + vx0 * t - a1 - vx1 * s}^2 = {b0 + vy0 * t - b1 - vy1 * s}^2 = {c0 + vz0 * t - c1 - vz1 * s}^2     上記の式をs,tに関して偏微分してやり,それぞれを0として連立 方程式を解き,s,tを求める.   求めたs,tを各直線式に代入してやり,2直線間の距離が最も短く なる2点を求める. 4.その2点の線分上の中点を求め,点s(d,e,f)とする. 上記手法で求めようとしましたが,どうも点sの座標が求まりません. 点sで方向余弦を求めるのが駄目なのでしょうか? 2直線間の距離が最も短くなる2点の求め方が駄目なのでしょうか? 幾何学初心者なため,混乱しております. 宜しくお願いいたします.

  • 直線と線分の交差判定について高速なアルゴリズム

    タイトルの通りなのですが、 まさにその部分をプログラムで作っている最中です。 直線 : ax+by+c=0 で言うところの a,b,c のパラメータと 線分の2端点 ( x1 , y1 ) , ( x2 , y2 ) がわかっています。 その情報を使って今は  ( ax1 + by1 + c ) * ( ax2 + by2 +c ) < 0 のときに交差している。 という風に処理しているんですが、 どうにもこの部分の処理で時間がかかっているみたいで、 なんとか高速化したいんですが、直線と線分の交差判定について触れてあるサイトが少なかったり、 今使っているアルゴリズムのサイトだったりしか見かけないので、どうにもこうにもなりません。 もしこれが最速のアルゴリズムならしかたないんですが、もし皆さんご存知でしたらお力添えをお願いします。

  • 点と直線の距離を求める方程式

     円(x-2)^2+(y-2)^2 = √5 と 直線 y = mx の交点を E、F とする。線分 EF の長さが 2 のときの 直線の傾き m を求める。  原点を O、円の中心を P、P から EF に下ろした垂線と EF の交点を H とする。   PH^2 + HE^2 = PH^2 + 1 = 5.   PH = 2.  P(2,2)、mx - y = 0 なので、点P(x0,y0) と 直線 L: ax + by + c = 0 の距離の公式   |ax0+by0+c|/√(a^2+b^2) を使えば   |2m-2|/√(m^2+1) = 2.   |2m-2| = 2√(m^2+1).   (2m-2)^2 = 4(m^2+1).   4m^2 - 8m + 4 = 4m^2 + 4.   m = 0  どこがおかしいのでしょう?

  • 点と直線の距離d

    お世話になっております。 数学IIの図形と方程式から、実際には円と直線の共有点の個数を定める基本的な問題についてですが、これまた基本的な点と直線の距離dを導く過程でてこずってしまい、恥ずかしながら質問致します。 問題「円x^2+y^2=1とy=x+kが異なる二点で交わるときの、定数kの値の範囲を定めろ」というのを、原点から直線までの距離dと円の半径rとの関係から導く方法でもとめようと思います。 公式を使えば、d=|k|/√(2)と出来ますが、公式の定着が良く無く、一から式を立てようとやってみましたら…… y=x+k…(1) として、まず原点Oから直線(1)に垂線を下ろし、その足をH(x0,y0)とする。二直線については、(1)⊥直線OH であるから、OHの方程式の傾きmは、m・1=-1より、m=-1。また、OHは原点Oを通るから結局OHの方程式は y=-x…(2)になる。 さらに垂線の足Hは、二直線(1)(2)の交点であるから、(1)と(2)の連立方程式の解としてHの座標が得られる。これを解くとx0=-(k/2)、y0=k/2。 これらから、dは線分OHの長さとして、d={√(2k^2)}/2。一方円の半径rは1だから、 {√(2k^2)}/2<1。有理化して整理すれば、|k|<√(2)より場合分けして、-√(2)<k<√(2) となる。 一から式を立てると面倒ですが、公式の丸暗記が当てにならない当方としては、時々こうやって一から考え直すと頭がスッキリするのですが、公式を使う場合より、計算が煩雑で解き方より計算に脳みそが偏ってしまいます。なので、ここまでの解の筋道についておかしな点がありましたら、御指摘下さると嬉しいです。宜しくお願い致します。

  • 直線に対する対称点の求め方(正射影)

    【問題】「直線l:5x+2y+1に対するl上にない点P(p,q)の対称点Rを求めよ。」 【私の考え方】 「直線lは点A(-1,2)を通る。線分PRと直線lとの交点をHとする。 直線lの法線ベクトルの一つはn↑=(5,2)なので、 PH↑は『{(AP↑・n↑)/|n↑|^2}n↑』・・・(1) か又は 『ー{(AP↑・n↑)/|n↑|^2}n↑』・・・(2) だと思うのですが、どちらかに絞ることができません。 先日教えていただいた方法では http://oshiete1.goo.ne.jp/qa5536137.html 答えが一つに絞れるので答えが2つになったり、場合分けをしたりすることはないと思うのですが・・・。 PH↑さえ出せればRの座標は容易なのですが、 PH↑が(1)と(2)のどちらになるか分かる方、よろしくお願い致します。

  • 回路図の見方について

    http://oshiete1.goo.ne.jp/qa4212823.html?ans_count_asc=20 上記の最後の質問の件、よろしくお願い致します。

  • 困ってます!!!!

    楽天オークションを退会したいのですが、(理由はこちら↓ http://oshiete1.goo.ne.jp/qa5270740.html?ans_count_asc=20) どうしたらいいのでしょうか? このままだと心配です。

専門家に質問してみよう