這個圖是從知乎上儲存下來的:
其實主要是利用了三角形的相似:
**如下:
// 兩點式直線公式:(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在座標原...