题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。
解题思路:
先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。
判断共线: p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0 来判断,
判断 平行: p1p2 与 q1q2 共线
求交点:
直线p1p2上的点 可表示为 p1+t(p2-p1) , 而交点 又在 直线q1q2上, 所以有 (q2-q1)x (p1 + t(p2-p1 ) - q1 ) =0
解得 交点 t = p1 + ( ((q2-q1) x (q1 - p1)) /( (q2-q1) x(p2-p1) ) *(p2-p1) )
-----------------------------------------------------------------------
注意: double 型数据为0 不能直接==0
------------------------------------------------------------------------
叉乘不满足交换律
const double eps = 1e-8 ;double add(double x , double y){ if(fabs(x+y) >t ; while(t--){ p1.read() , p2.read() ; q1.read() , q2.read() ; k = twoline(p1 , p2 , q1 , q2 , interp) ; if(k == 1) puts(line) ; else if(k == 2) puts(none) ; else printf(point %.2lf %.2lf\n , interp.x , interp.y) ; } puts(end of output) ; return 0 ;}
