計算幾何之求兩條線段的交點

2021-09-26 03:49:11 字數 945 閱讀 8933

這個圖是從知乎上儲存下來的:

其實主要是利用了三角形的相似:

**如下:

// 兩點式直線公式:(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,y3) + d1/(d1+d2) * (x4,y4)

// d2/(d1+d2) = |a*x4 + b*y4 + c|/(|a*x4 + b*y4 + c|+|a*x3 + b*y3 + c|)

// d1/(d1+d2) = |a*x3 + b*y3 + c|/(|a*x4 + b*y4 + c|+|a*x3 + b*y3 + c|)

public static point detectintersection(point a, point b, point c, point d)

要注意一點的是:這裡會檢測是否相交了,因此這裡要坐下左檢測:

/**

* ->

* a:(x1, y1), point a:(x2, y2)

*/private static boolean isleft(double x1, double y1, double x2, double y2)

/** * ->

* pq and point s

*/public static boolean isleft(point p, point q, point s)

演算法 兩條線段求交點

問題情景 驗證兩條線段是否相交時,需求兩條線段的交點 演算法詳解 已知兩個線段分別是 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...

C 根據兩條線段 計算該兩條直線的交點

也可以理解為 三角形乙個頂點 連線 內部某乙個點,延長後和另一條邊的交點。計算兩條直線的交點 l1的點1座標 l1的點2座標 l2的點1座標 l2的點2座標 public static xyz getintersection xyz linefirststar,xyz linefirstend,xy...

判斷兩條線段 直線相交,並求交點

一.向量基本知識 因為後面的計算需要一些向量的基本知識,這裡只是簡單的列舉如下,如果需要更加詳細的資訊,可以自行搜尋wikipedia或google。1.向量的概念 如果一條線段的端點是有次序之分的,我們把這種線段成為有向線段 directed segment 如果有向線段p1p2的起點p1在座標原...