zoukankan      html  css  js  c++  java
  • 判断两线段是否相交 模板

     1 struct point
     2 {
     3     double x, y;
     4     point( double _x = 0, double _y = 0 )
     5     {
     6         x = _x;
     7         y = _y;
     8     }
     9     point operator-( point t )
    10     {
    11         return point( x - t.x, y - t.y );
    12     }
    13     double operator*( point t )
    14     {
    15         return x * t.y - y * t.x;
    16     }
    17 };
    18 
    19 //快速排斥试验模板
    20 bool quickExclude( point a, point b, point c, point d )
    21 {
    22     int x1 = a.x, x2 = b.x, x3 = c.x, x4 = d.x;
    23     int y1 = a.y, y2 = b.y, y3 = c.y, y4 = d.y;
    24     if (  min(x1,x2) <= max(x3,x4) && min(x3,x4) <= max(x1,x2) &&
    25            min(y1,y2) <= max(y3,y4) && min(y3,y4) <= max(y1,y2)      )
    26            return true;
    27     else    return false;
    28 }
    29 
    30 //跨立试验模板(两线段是否相交)
    31 bool ifIntersect( point a, point b, point c, point d )
    32 {
    33     if ( quickExclude( a, b, c, d ) )
    34     {
    35         if (  ( ( a - c ) * ( c - d ) ) * ( ( b - c ) * ( c - d ) ) <= 0 && ( ( c - a ) * ( a - b ) ) * ( ( d - a ) * ( a - b ) ) <= 0  )
    36         return true;
    37     }
    38     return false;
    39 }
    40 
    41 //若已判断两线段相交求交点或者求两相交直线交点模板(四个点为a, b, c, d),a1, b1, c1, a2, b2, c2为方程系数,交点为x0和y0
    42 double a1 = a.y - b.y;
    43 double b1 = b.x - a.x;
    44 double c1 = a.x * b.y - b.x * a.y;
    45 double a2 = c.y - d.y;
    46 double b2 = d.x - c.x;
    47 double c2 = c.x * d.y - d.x*c.y;
    48 double x0 = ( b1 * c2 - b2 * c1 ) / ( a1 * b2 - a2 * b1 );
    49 double y0 = ( a2 * c1 - a1 * c2 ) / ( a1 * b2 - a2 * b1 );
    View Code
  • 相关阅读:
    1061 Dating (20 分)
    1112 Stucked Keyboard (20 分)
    1077 Kuchiguse (20 分)
    1065 A+B and C (64bit) (20 分)
    1046 Shortest Distance (20 分)
    1124 Raffle for Weibo Followers (20 分)
    1036 Boys vs Girls (25 分)
    1113 Integer Set Partition (25 分)
    f开头的
    g开头的
  • 原文地址:https://www.cnblogs.com/wsruning/p/4719086.html
Copyright © 2011-2022 走看看