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

    对于线段A,B,如果 线段A与直线B相交 ,线段B与直线A相交 ,那么就可以认为线段A 和线段B相交。
    关键问题是:如何判断直线AB是否与线段CD相交呢?
    设直线AB的方程为:f(x,y) = 0,直线方程可以通过两点式求得。
    当C和D点不在直线的同侧时,直线AB必然与线段CD相交,也就是说直线AB与线段CD相交的条件为:f(C) * f(D) <= 0。
    代码如下:
     1     typedef struct point  
     2 
     3     {  
     4 
     5         float x;  
     6 
     7         float y;  
     8 
     9     }Point;  
    10 
    11     //判断直线AB是否与线段CD相交  
    12 
    13     bool lineIntersectSide(Point A, Point B, Point C, Point D)  
    14 
    15     {  
    16 
    17         // A(x1, y1), B(x2, y2)的直线方程为:  
    18 
    19         // f(x, y) =  (y - y1) * (x1 - x2) - (x - x1) * (y1 - y2) = 0  
    20 
    21       
    22 
    23         float fC = (C.y - A.y) * (A.x - B.x) - (C.x - A.x) * (A.y - B.y);  
    24 
    25         float fD = (D.y - A.y) * (A.x - B.x) - (D.x - A.x) * (A.y - B.y);  
    26 
    27       
    28 
    29         if(fC * fD > 0)  
    30 
    31             return false;  
    32 
    33       
    34 
    35         return true;  
    36 
    37     }  
    38 
    39     bool sideIntersectSide(Point A, Point B, Point C, Point D)  
    40 
    41     {  
    42 
    43         if(!lineIntersectSide(A, B, C, D))  
    44 
    45             return false;  
    46 
    47         if(!lineIntersectSide(C, D, A, B))  
    48 
    49             return false;  
    50 
    51         return true;  
    52 
    53     }  
  • 相关阅读:
    在单机Hadoop上面增加Slave
    两台机器添加信任关系
    JS Scoping and Hoisting
    SCSS(SASS、CSS)学习
    程序的内存情况
    delete-node-in-a-bst
    serialize-and-deserialize-bst
    Linux Shell脚本编程--curl命令详解
    iOS文件保存策略
    浅谈spring——spring MVC(十一)
  • 原文地址:https://www.cnblogs.com/lovebay/p/10477090.html
Copyright © 2011-2022 走看看