ホームページ  >  記事  >  データベース  >  POJ1269 判断2条直线的位置关系

POJ1269 判断2条直线的位置关系

WBOY
WBOYオリジナル
2016-06-07 15:49:521078ブラウズ

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两

题目大意:给两个点能够确定一条直线,题目给出两条直线(由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 ;
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:java连接access数据库次の記事:Cisco access