プロが教える店舗&オフィスのセキュリティ対策術

(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)があり、
その直線の立方体内部の線分の長さを求めたいと思っております。
直線が通過する面や点を求めなければなりませんが、
なかなかうまくいきません。
高校、大学数学レベルの公式でもかまいません。
どなたか、よろしくお願いいたします。

A 回答 (8件)

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点について距離の公式から、線分の長さを求めます。

他の場合も同じようにできると思います。
(何かあったらお願いします。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/27 09:04

ちょい待ち。

A No.7 で、求まる?
    • good
    • 0

直線


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})
として処理を終わる
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/27 17:43

ANo.4です。

お礼ありがとうございます。

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

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

お礼日時:2012/08/27 11:29

直線がどの面と交わるかを判定する方法を


A No.3 に書いておきました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/27 09:05

内部の二点の座標から、それを通る直線を


パラメータ表示します。その際、直線上の点 P を
→OP = (→OA) + t(→AB) と表すと、
t=0 のとき P=A、t=1 のとき P=B となる
パラメータ表示ができます。

直方体の各面(を延長した平面)を方程式で表示しておき、
そこへ直線のパラメータ表示を代入すると、
交点に対応する t の値が求まります。

交点の t は、最大 8 個あります。その中で、
負で一番 0 に近い t が、A に近いほう、
1より大きいなかで最小のtが、B に近いほうの
直方体と直線の交点を表します。

両端が求まれば、あとは、二点間の距離公式です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/27 08:58

ANo.1です。

 補足について

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

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

お礼日時:2012/08/27 08:57

>(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)についても同じです。

>直線が通過する面や点を求めなければなりませんが、
求めなくてもいいと思います。
立方体内部の線分ならば、立方体の面や点は通過しないと思います。

どうでしょうか?

この回答への補足

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

補足日時:2012/08/26 15:15
    • good
    • 0

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