兩條線段間的位置 叉積

2022-08-29 00:51:13 字數 983 閱讀 4018

兩條線段共有三種相對位置,平行,相交和重合,題目如果給出兩條線段端點座標,然後判斷這兩條線段的相對位置,如果是相交還要算出交點座標。 

可以用叉積來做,將兩條線段看做兩條向量 

平行就是這兩條向量的叉積為0 

重合就是他們首尾連線的向量與其中某條向量的叉積也為0 

//

先判斷兩條線段是否不平行(最好同時判斷是否有交點並且不平行,因為浮點運算不精確),然後計算兩條線段的交點。以下是c語言**:

#include#include

#define eps 1e-8      //精度,因為浮點數運算不精確

#define zero(x) (((x)>0?(x):-(x))struct

point;

//計算交叉乘積(p1-p0)x(p2-p0)

double

xmult(point p1,point p2,point p0) //

intdot_online_in(point p,point l1,point l2) //

intsame_side(point p1,point p2,point l1,point l2) //

判兩直線平行

intparallel(point u1,point u2,point v1,point v2) //

判三點共線

intdots_inline(point p1,point p2,point p3) //

判兩線段相交,包括端點和部分重合

intintersect_in(point u1,point u2,point v1,point v2) //

計算兩線段交點,請判線段是否相交(同時還是要判斷是否平行!)

point intersection(point u1,point u2,point v1,point v2)

int main(void

)

else

return0;

}

向量叉積之判斷兩條線段相交

詳情點選數學基礎之向量點乘與叉乘 常用的方法是通過向量叉乘來判斷,這種方法不需要算出直線方程 再判斷交點有否 在 實現上比較簡便。用這種方法判別線段是否相交一般分為兩步 1.快速排斥實驗 2.跨立實驗 首先判斷兩條線段在 x 以及 y 座標的投影是否有重合。也就是判斷乙個線段中 x 較大的端點是否小...

判斷兩條線段的相對位置

判斷兩條線段的相對位置,用int s1表示第一條線段,int s2表示第二條線段,即兩線段兩端點的座標為 s1 0 s1 1 s1 2 s1 3 和 s2 0 s2 1 s2 2 s2 3 如果兩線段沒有交點則返回 no 只有乙個交點則返回 point 多個交點則返回 segment public ...

兩條線段是否相交

可以通過叉積來判斷兩條線段是否相交,ab ac與ab ad的結果為異號,並且 cd ca與cd cb的結果為 異號,則兩條直線相交。b相交.判斷兩線段是否相交 1 快速排斥試驗 設以線段 p1p2 為對角線的矩形為 r,設以線段 q1q2 為對角線的矩形為 t,若 r t 不相交,則兩線段不可能相交...