問題情景:
驗證兩條線段是否相交時,需求兩條線段的交點
演算法詳解:
已知兩個線段分別是(x1,y1)(x2,y2)以及(x3,y3)(x4,y4)。
設線段所在的直線方程為ax+by+c=0
a1=y2-y1, b1=-(x2-x1), c1=-a1*x1-b1*y1=-x1*y2+x2*y1;
a2=y4-y3, b2=-(x4-x3), c2=-a2*x3-b2*y3=-x3*y4+x4*y3;
d=a1*b2-a2*b1
1. 判斷是否相切:a1/b1=a2/b2;
2. 判斷是否共線:a1/a2=c1/c2;
3. 求取交點:((b1*c2-b2*c1)/d,(a2*c1-a1*c2)/d)
4. 若判斷兩線段是否相交,則需要判斷交點是否在這兩條線段上(方法不限)。
**優化:
上面許多表示式都可以用以下叉乘公式來代替
func(a,b,c,d) return a*d-b*c;
判斷兩條線段 直線相交,並求交點
一.向量基本知識 因為後面的計算需要一些向量的基本知識,這裡只是簡單的列舉如下,如果需要更加詳細的資訊,可以自行搜尋wikipedia或google。1.向量的概念 如果一條線段的端點是有次序之分的,我們把這種線段成為有向線段 directed segment 如果有向線段p1p2的起點p1在座標原...
計算幾何之求兩條線段的交點
這個圖是從知乎上儲存下來的 其實主要是利用了三角形的相似 如下 兩點式直線公式 x x1 x2 x1 y y1 y2 y1 x y2 y1 y x1 x2 x1 y1 y2 y1 x2 x1 0 a y2 y1,b x1 x2,c x1 y1 y2 y1 x2 x1 x,y d2 d1 d2 x3,...
兩條線段是否相交及交點座標
兩條線段是否相交及交點座標 思路 已知兩條線段的起點和終點座標 先分別求出兩條線段的解析式,然後分情況討論。lua 如下 function uiutil getposoftowline pointa,pointb,pointm,pointn ab線段,mn線段 local xa,ya pointa....