判断线段与圆是否相交

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断线段与圆是否相交相关的知识,希望对你有一定的参考价值。

struct Point 

    ll x, y;
 ;
Point O;   //圆心
ll r;      //半径
//  判断线段是否和圆相交
bool pd(Point *p_1, Point *p_2)

    ll a,b,c,dist_1,dist_2,angle_1,angle_2;  
    if(p_1->x==p_2->x)
    
        a=1,b=0,c=-p_1->x;
    
    else if (p_1->y==p_2->y)
    
        a=0,b=1,c=-p_1->y;
    
    else
    
        a=p_1->y-p_2->y;
        b=p_2->x-p_1->x;
        c=p_1->x*p_2->y-p_1->y*p_2->x;
    
    dist_1=a*O.x+b*O.y+c;
    dist_1*=dist_1;
    dist_2=(a*a+b*b)*r*r;
    if(dist_1>dist_2)  
        return 0;   
    angle_1=(O.x-p_1->x)*(p_2->x-p_1->x)+(O.y-p_1->y)*(p_2->y-p_1->y);
    angle_2=(O.x-p_2->x)*(p_1->x-p_2->x)+(O.y-p_2->y)*(p_1->y-p_2->y);
    if(angle_1>0&&angle_2>0)return 1; 
    return 0;

以上是关于判断线段与圆是否相交的主要内容,如果未能解决你的问题,请参考以下文章

判断两条线段是否相交

平面中判断线段与矩形是否相交

poj1410(判断线段和矩形是否相交)

A Round Peg in a Ground Hole POJ - 1584(凸边形与圆相交)

判断2个线段是否相交

POJ 1127 Jack Straws ( 求直线交点, 判断线段是否相交(含端点) )