看板 ck47th320 關於我們 聯絡資訊
※ 引述《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)