作者changkh (留學生涯)
看板ck47th320
標題Re: [問題] 空間幾何的問題
時間Mon Apr 25 23:31:34 2005
※ 引述《puberty (飄泊)》之銘言:
: ※ 引述《changkh (留學生涯)》之銘言:
: : 我有一個空間幾何的問題:
: : 在三度空間中給定兩個線段,以(x, y, z)來表示端點,所以有四個點。
: : 已知這兩個線段在x-y平面的投影相交,所以有"上""下"的關係。
: : 問如何"不用除法"決定哪個線段在上哪個線段在下?
: : 一個簡單的解法是用 x-y平面解交點,代入線段方程式解z。
: : 但是這個方法會用到除法。
: : 印象中好像可以用外積來做,但是高中數學課本沒帶來。
: : 有沒有人知道怎麼做的呢?
: 暴力硬算! :(
: 第一個線段 : x = x1 + a1 * s 第二個線段 : x = x2 + a2 * t
: y = y1 + b1 * s y = y2 + b2 * t
: z = z1 + c1 * s z = z2 + c2 * t
: u = ( a1, b1, c1 ), v = ( a2, b2, c2 )
: A = ( x1, y1, z1 ), B = ( x2, y2, z2 )
: 解兩線間最短距離點的坐標 :
: F(s,t)=(su+A-tv-B).(su+A-tv-B)
: dF/ds = 2(su+A-tv-B).u=0
: dF/dt =-2(su+A-tv-B).v=0 解得 Qs=[(B-A).u](v.v)-[(B-A).v](u.v)
: Qt=[(B-A).u](u.v)-[(B-A).v](u.u)
: 其中 Q = (u.u)(v.v)-(u.v)^2 > 0
: 所以算 Q[ ( c1 * s + z1 ) - ( c2 * t + z2 ) ] 的符號
: 正就是第一個線段在上; 負就是第二個線段在上 :p
: 不想用除法....就只好把解硬算出來代了
謝謝你啦。
受到你的啟發,後來我直接解兩線交點(x,y)代入後求z1+c1*s-z2+c2*t,
然後同乘分母和0比大小,這樣就不用用到除法了。
做出來的式子是(b1*a2-a1*b2)(z2-z1)+((x1-x2)*b1-(y1-y2)*a1)*c2
-((x1-x2)*b2-(y1-y2)*a2))*c1
如果(b1*a2-a1*b2)>0,那麼若上式 >0,l2在l1上面。
如果(b1*a2-a1*b2)<0,那麼若上式 >0,l2在l1下面。
如果b1*a2-a1*b2=0,那兩線在x-y平面重合。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.43.196.35
※ 編輯: changkh 來自: 68.43.196.35 (04/25 23:33)