• ベストアンサー

立方体の線分の距離

(0,0,0),(1,0,0),(0,1,0),(1,1,0),(0,0,1),(1,0,1),(0,1,1),((1,1,1)を含む立方体があります。 この内部に2点(x1,y1,z1), (x2,y2,z2)があり、 その直線の立方体内部の線分の長さを求めたいと思っております。 直線が通過する面や点を求めなければなりませんが、 なかなかうまくいきません。 高校、大学数学レベルの公式でもかまいません。 どなたか、よろしくお願いいたします。

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

  • ベストアンサー
  • ferien
  • ベストアンサー率64% (697/1085)
回答No.4

ANo.2です。 >交点の求め方については、どこで交わるかによって変わってくると思うので、 >1通りには決められません。 >(具体的に条件を設定した方が、考えやすいと思います。) 具体的に交わる部分を決めて、交点を求めてみます。 「直線は、上下の面を通るとします。」 2点(x1,y1,z1), (x2,y2,z2)を通る直線の方程式は、 (x-x1)/(x2-x1)=(y-y1)/(y2-y1)=(z-z1)/(z2-z1) ……(1) 立方体の各面の方程式は、 上下がz=1,z=0,左右がy=0,y=1,前後がx=1,x=0 求め方は、上面の場合、(他の場合も求め方は同じです。) 求める平面の方程式をax+by+cz+d=0とおいて、 座標(0,0,1),(1,0,1),(0,1,1),((1,1,1)を順に代入すると c+d=0より、c=-d a+c+d=0より、a=0 b+c+d=0より、b=0  a+b+c+d=0は、上で求めたものを満たします。 a:b:c:d=0:0:1:-1より、平面の方程式は z-1=0だから、よって、z=1 (1)の式=tとおくと、 (x-x1)=t(x2-x1)より、x=x1+t(x2-x1) (y-y1)=t(y2-y1)より、y=y1+t(y2-y1) (z-z1)=t(z2-z1)より、z=z1+t(z2-z1) z=0より、z1+t(z2-z1)=0より、t=-z1/(z2-z1) z=0と直線の交点は、 x=x1+t(x2-x1)(tのところに上の式を代入する) y=y1+t(y2-y1) z=0 同様に(1)の式=sとおくと、 z=1より、s=(1-z1)/(z2-z1) z=1と直線の交点は、 x=x1+s(x2-x1) y=y1+s(y2-y1) z=1 この2点について距離の公式から、線分の長さを求めます。 他の場合も同じようにできると思います。 (何かあったらお願いします。)

bear-bear_2010
質問者

お礼

ありがとうございます。 上下面以外にも側面間などいろいろありすぎて困っております。 他の回答者も参考にしながら考えてみます。

その他の回答 (7)

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.8

ちょい待ち。A No.7 で、求まる?

  • muturajcp
  • ベストアンサー率78% (505/644)
回答No.7

直線 L={(x,y,z)=(x1,y1,z1)+t(x2-x1,y2-y1,z2-z1)|t∈R} と立方体の6面 S1={(0,y,z)|0≦y≦1,0≦z≦1} S2={(1,y,z)|0≦y≦1,0≦z≦1} S3={(x,0,z)|0≦x≦1,0≦z≦1} S4={(x,1,z)|0≦x≦1,0≦z≦1} S5={(x,y,0)|0≦x≦1,0≦y≦1} S6={(x,y,1)|0≦x≦1,0≦y≦1} との交点を求めればよい。 n=0とする k=1~6までS_kに対して以下の処理を繰り返す (1≦k≦2&x1=x2).or.(3≦k≦4&y1=y2).or.(5≦k≦6&z1=z2) のときLとS_kは平行だから次のk+1の処理へ飛ぶ k=1のときt=x1/(x1-x2) k=2のときt=(1-x1)/(x2-x1) k=3のときt=y1/(y1-y2) k=4のときt=(1-y1)/(y2-y1) k=5のときt=z1/(z1-z2) k=6のときt=(1-z1)/(z2-z1) x=x1+(x2-x1)t y=y1+(y2-y1)t z=z1+(z2-z1)t x<0.or.x>1.or.y<0.or.y>1.or.z<0.or.z>1のとき次のk+1の処理へ飛ぶ (0≦x≦1,0≦y≦1,0≦z≦1のときLとS_kは交点(x,y,z)を持つ) n=0のとき(xs,ys,zs)=(x,y,z);n=1として次のk+1の処理へ飛ぶ n=1のとき d=√{(x-xs)^2+(y-ys)^2+(y-zs)^2} d≒0のとき同一交点だから次のk+1の処理へ飛ぶ d>0のとき 線分の長さを d(=√{(x-xs)^2+(y-ys)^2+(y-zs)^2}) として処理を終わる

bear-bear_2010
質問者

お礼

ありがとうございます。 条件文があり、わかりやすいです。挑戦してみます。

  • ferien
  • ベストアンサー率64% (697/1085)
回答No.6

ANo.4です。お礼ありがとうございます。 >上下面以外にも側面間などいろいろありすぎて困っております。 面の位置が変わったら、面の方程式を変えて計算すればいいので、 面と面の間の線分の計算方法としては、ANo.4の方法でいいような気がします。 立方体の頂点の1つと面の間の線分ならば、もっと簡単です。 試してみて下さい。

bear-bear_2010
質問者

お礼

ありがとうございます。 現在、回答していただいた方々を実際に試しているところです。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.5

直線がどの面と交わるかを判定する方法を A No.3 に書いておきました。

bear-bear_2010
質問者

お礼

ありがとうございます。 条件が複雑そうですが考えてみます。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

内部の二点の座標から、それを通る直線を パラメータ表示します。その際、直線上の点 P を →OP = (→OA) + t(→AB) と表すと、 t=0 のとき P=A、t=1 のとき P=B となる パラメータ表示ができます。 直方体の各面(を延長した平面)を方程式で表示しておき、 そこへ直線のパラメータ表示を代入すると、 交点に対応する t の値が求まります。 交点の t は、最大 8 個あります。その中で、 負で一番 0 に近い t が、A に近いほう、 1より大きいなかで最小のtが、B に近いほうの 直方体と直線の交点を表します。 両端が求まれば、あとは、二点間の距離公式です。

bear-bear_2010
質問者

お礼

ありがとうございます。 具体的に数値を入れて、試してみます。

  • ferien
  • ベストアンサー率64% (697/1085)
回答No.2

ANo.1です。 補足について >立方体内の2点を通る直線の、 >立方体内の線分の長さです。 立方体と直線の交点を2点求めて、やはり距離の公式だと思います。 交点の求め方については、どこで交わるかによって変わってくると思うので、 1通りには決められません。 (具体的に条件を設定した方が、考えやすいと思います。)

bear-bear_2010
質問者

お礼

ありがとうございます。 条件が複雑で困っております。

  • ferien
  • ベストアンサー率64% (697/1085)
回答No.1

>(0,0,0),(1,0,0),(0,1,0),(1,1,0),(0,0,1),(1,0,1),(0,1,1),((1,1,1)を含む立方体が >あります。 >この内部に2点(x1,y1,z1), (x2,y2,z2)があり、 >その直線の立方体内部の線分の長さを求めたいと思っております。 ふつうに2点間の距離の公式でいいと思います。 √{(x2-x1)^2+(y2-y1)^2+(z2-z1)^2} 立方体内部の点なので、0<x1<1,0<y1<1,0<z1<1 (x2,y2,z2)についても同じです。 >直線が通過する面や点を求めなければなりませんが、 求めなくてもいいと思います。 立方体内部の線分ならば、立方体の面や点は通過しないと思います。 どうでしょうか?

bear-bear_2010
質問者

補足

ご回答ありがとうござます。 言葉足らずで申し訳ありません。 立方体内の2点を通る直線の、 立方体内の線分の長さです。 いろいろな条件文がでてきても構いません。 よろしくお願いいたします。

関連するQ&A

  • 面と線分のなす角度

    以前質問させていただいたことに追加でわからない点が出てきましたので質問させていただきます。 xyz座標系で(0,0,1)(0,1,0)(1,0,0)の3点を通る面があります。また、(x1,y1,z1)(x2,y2,z2)の2点を両端とした線分があります。面に対しても線分がどれだけ傾いているか(線と面のなす角θ)はどのようにしたら求められますでしょうか?例えば(2,2,2)(3,3,3)を通る線分を考えて、面に対して平行移動してみようと思うのですが、そのやり方がよくわからないのです。よろしくお願いいたします。

  • 2点間の距離で困っています

    ご教授お願い致します 点a(x1,y1,z1)と点b(x2,y2,z2)があります この2点を結ぶ直線の長さはab=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2)) で求まります ここからが質問です、例えばabの長さが100.5と出たとき点aは固定してabのベクトル上で100.0の点cのx,y,zの座標を求めるにはどの様な公式を使えばよろしいでしょうか?

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

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

  • 3次元での直線と点の距離

    点A(x1,y1,z1)と点B(x2,y2,z2)を通る直線Cと 点D(x3,y3,z3)の距離を求めたいんですが、 公式などありますでしょうか?

  • 立方体を2次元で表現

    立方体を画面上で表現するにはどうすればいいのでしょうか? いろいろ調べてみたところ display.x=-sinθx+cosθy display.y=-cosθcosφ-sinθcosφy+sinθz というのを見つけて、やってみたのですが、 θ=φ=60°付近ではきれいな立方体に見えるのですが 角度を変えると、ゆがんでしまいます。 式が間違っているのでしょうか? よろしくお願いします。

  • 2つの線分に垂直な線分の交点

    2次元平面に点P(x0,y0)、点A(x1,y1)、点B(x2,y2)があり、 点Aを通る線分PAに垂直な線分と 点Bを通る線分PBに垂直な線分の交点の 求め方を教えて下さい。 垂直ベクトルを求め、任意に座標を決めて 連立方程式を解くやり方だと上手くいかない時が あります。シンプルに求める方法がありましたら 教えて下さい。

  • ある直線から見たときの座標の位置

    ある直線から見たときの座標の位置 例えば次のような直線があると仮定します。 (x-5)/(7-5)=(y-2)/(-9-2)=(z+1)/(13+1)    ※(X-X1)/(X2-X1)=(Y-Y1)/(Y2-Y1)=(Z-Z1)/(Z2-Z1)という直線の公式より ※見て分かると思いますがこの直線は(5,2,-1)と(7,-9,13)の2点を通っています この時、ある点(N,M,L)がこの直線より上にあるか下にあるかを調べるにはどうすればいいでしょうか?

  • 体心立方格子の基本ベクトルと面指数の関係について

    ある固体物理の本に体心立方格子の基本並進ベクトルは a_1 = a/2(-x+y+z), a_2 = a/2(x-y+z), a_3 = a/2(x+y-z) で、逆格子の基本ベクトルは b_1 = (2pi/a)(y+z), b_2 = (2pi/a)(x+z), b_3 = (2pi/a)(x+y) と書いてありました。 (ここで、通常の、球が中心にある立方体を考えたときに、 aは立方体の辺の長さ、x,y,zは立方体の稜に平行で互いに 直交している単位ベクトルです。piは円周率です。) このとき、(100)面というと、b_1を法線にもつ面だと思うのですが、 b_1は(y+z)の方向なので、立方体を斜めに切った面になって しまいます。 通常(100)面(又は(200)面)は立方体の側面で、上記の面は (110)面だと聞いたことがあります。 どこか大きく勘違いしているところがあるのではないかと思い、 質問させて頂きました。 どなたか教えて頂ければ幸いです。よろしくお願い致します。

  • 円と線分の共有点

    点P(x1, y1)と点Q(x2, y2)を通る直線と、中心のx座標、y座標、半径が分かっている円Oとの共有点を調べることは簡単ですが、線分PQと円Oの共有点を、図を描かずに計算で調べることは出来ますか? よろしくお願いします。

  • 座標を結んだ線分の交差

    配列 x, y に(実数)値が与えられており、 (x[1], y[1]) を座標平面上の点 P1 、(x[2], y[2]) を点 P2 、… と考えたとき、 P1とP2を結んだ線分と、P3とP4を結んだ線分が交差しているかを判断する プログラム(アルゴリズム)はどのように考えることができるでしょうか? 結ぶ2点を通る直線の傾きなどを求めても、どのように利用すればよいか思いつきませんでした。 C言語というより数学の話かもしれませんが、ご教示いただければ幸いです。 なかなか方法を思いつかず、私の考察を提示できずに恐縮ですが宜しくお願いいたします。