0
我想找到一種方法來檢查兩條線段是否相交。我正在使用Xlib編程來實現此目的。如何查找兩條線段(不是兩條直線)是否相交
我在互聯網上查過,但我只找到找到兩條線的交點但不是兩條線段的方法。
如何使用X lib編程來實現這一點?
我想找到一種方法來檢查兩條線段是否相交。我正在使用Xlib編程來實現此目的。如何查找兩條線段(不是兩條直線)是否相交
我在互聯網上查過,但我只找到找到兩條線的交點但不是兩條線段的方法。
如何使用X lib編程來實現這一點?
你不需要這個Xlib。讓兩段是
A1 = (x1, y1)
- >B1 = (x1 + dx1, y1 + dy1)
和A2 = (x2, y2)
- >B2 = (x2 + dx2, y2 + dy2)
。讓
vp = dx1 * dy2 - dx2 * dy1
如果vp == 0
段是平行的並且沒有交集。
否則,設v = (vx, vy)
是載體A1
A2
之間和
vx = x2 - x1
vy = y2 - y1
計算
k1 = (vx * dy2 - vy * dx2)/vp
k2 = (vx * dy1 - vy * dx1)/vp
如果任或k2
落入[0, 1]
區間之外,這些段沒有相交(但下層線做相交)。否則,該路口是
(x1 + k1 * dx1, y1 + k1 * dy1)
其中順便說一句,如果你想知道的對稱性,將是相同的點作爲
(x2 + k2 * dx2, y2 + k2 * dy2)
這些公式基本相似,只是在How do you detect where two line segments intersect?答案從那裏編碼對於新手或者急於求助的人來說不一定是微不足道的(就像我曾經多次)。
「如果vp == 0這些段是平行的並且沒有交集」或它們是平行的並且是同一行的一部分。在第二種情況下,需要額外的測試來確定這些段是否重疊。 – chux