求兩條直線(線段)的交點

2022-09-03 19:18:12 字數 1278 閱讀 2977

如圖,如何求得直線 ab 與直線 cd的交點p?

以上內容摘自《演算法藝術與資訊學競賽》。

思路就是利用叉積求得點p分線段dc的比,然後利用高中學習的定比分點座標公式求得分點p的座標。

看不懂的可以去複習下 定比分點 的知識。

#include #include #include #include using namespace std;

#define n 105

const double eps = 1e-6;

const double pi = acos(-1.0);

struct point

point(double x,double y):x(x),y(y){}

double x,y;

};struct seg

;int sgn(double x)

double cross(const point& p1,const point& p2,const point& p3,const point& p4)

double area(const point& p1,const point& p2,const point& p3)

double farea(const point& p1,const point& p2,const point& p3)

bool meet(const point& p1,const point& p2,const point& p3,const point& p4)

point inter(const point& p1,const point& p2,const point& p3,const point& p4)

**方面,我並沒有按照書上的寫法來寫,而是直接求出「比」k,然後利用通分前的公式計算。

書上那樣寫可能是因為前面已經求得了兩個叉積,直接使用更方便的關係。

下面是書中的寫法。

point inter(const point& p1,const point& p2,const point& p3,const point& p4)

ps:1、求交點之前,要保證兩條直線不共線。

2、如果是求兩條線段的交點,先判斷兩條線段是否相交。

若相交,則問題可轉化成兩條直線求交點。

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

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

求兩條直線的關係及交點

給你兩條直線,判斷這兩條直線是否共線,相交,不相交 即平行 相交的話輸出交點。判斷平行,然後通過叉積判斷是否共線。平行判斷可以判斷兩條直線的斜率是否相等。交點的話,相當於聯立方程組求解了。這些方程看模板理解的,剛才搜了下,有人講得比較清楚,借鑑下 如何判斷是否同線?由叉積的原理知道如果p1,p2,p...

演算法 兩條線段求交點

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