給你兩條直線,判斷這兩條直線是否共線,相交,不相交(即平行),相交的話輸出交點。
判斷平行,然後通過叉積判斷是否共線。
平行判斷可以判斷兩條直線的斜率是否相等。
交點的話,相當於聯立方程組求解了。
這些方程看模板理解的,剛才搜了下,有人講得比較清楚,借鑑下
如何判斷是否同線?由叉積的原理知道如果p1,p2,p3共線的話那麼(p2-p1)x(p3-p1)=0。因此如果p1,p2,p3共線,p1,p2,p4共線,那麼兩條直線共線。direction()求叉積,叉積為0說明共線。
如何判斷是否平行?由向量可以判斷出兩直線是否平行。如果兩直線平行,那麼向量p1p2、p3p4也是平等的。即((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0說明向量平等。
如何求出交點?這裡也用到叉積的原理。假設交點為p0(x0,y0)。則有:
(p1-p0)x(p2-p0)=0
(p3-p0)x(p2-p0)=0
展開後即是
(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0
(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0
將x0,y0作為變數求解二元一次方程組。
假設有二元一次方程組
a1x+b1y+c1=0;
a2x+b2y+c2=0
那麼x=(c1*b2-c2*b1)/(a2*b1-a1*b2);
y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
因為此處兩直線不會平行,所以分母不會為0。
求兩條直線(線段)的交點
如圖,如何求得直線 ab 與直線 cd的交點p?以上內容摘自 演算法藝術與資訊學競賽 思路就是利用叉積求得點p分線段dc的比,然後利用高中學習的定比分點座標公式求得分點p的座標。看不懂的可以去複習下 定比分點 的知識。include include include include using nam...
計算兩條直線的交點 C
ps 從其他地方看到的原始碼是有問題的。下面是修正後的 計算兩條直線的交點 l1的點1座標 l1的點2座標 l2的點1座標 l2的點2座標 public static pointf getintersection pointf linefirststar,pointf linefirstend,po...
判斷兩條線段 直線相交,並求交點
一.向量基本知識 因為後面的計算需要一些向量的基本知識,這裡只是簡單的列舉如下,如果需要更加詳細的資訊,可以自行搜尋wikipedia或google。1.向量的概念 如果一條線段的端點是有次序之分的,我們把這種線段成為有向線段 directed segment 如果有向線段p1p2的起點p1在座標原...