线段与圆的关系,该怎么解决

线段与圆的关系
算不明白了~   求助是会帮忙计算一下。

函数功能:   验证圆是否有效.
参               数:   1.   线段起点坐标;   2.   线段终点坐标;   3.圆心坐标;   4圆半径
返   回   值:   当圆与线段相交或者线段被圆包含返回False(无效圆),否则线段与圆相离和相切返回Ture(有效圆);
bool   IsCircularityValid(PointF&   line_b,PointF&   line_e,PointF&   center,float&   radii)
{
                //   取得线段的起点坐标,终点坐标和圆心坐标组成的三角形三边边长
                float   lineDis   =   GetPointDistance(line_b,   line_e);         //   线段起点到线段终点的长度.
                float   lineA         =   GetPointDistance(line_b,   center);       //   线段起点到圆心的长度.
                float   lineB         =   GetPointDistance(line_e,   center);       //   线段终点到圆心的长度.

                  //   取得圆心垂直与线段的距离
                float   p   =   (lineA+lineB+lineDis)/2;
                float   lineCen   =   sqrt(p*(p-lineA)*(p-lineB)*(p-lineDis))*2/lineDis;   //   取得垂直距离

if   (lineCen> =radii)                        
return   true;      
else  
{
if   (lineA   >   radii   &&   lineB   >   radii)
                                        return   ture;                             //   这里应该少了一成判断当线段横穿圆时没有排除。
else  
  return   false;
}
}

函数功能:取得2D平面内任意两点之间的距离
参               数:1.点坐标A   ;   2   点坐标B;
返   回   值:返回两点之间的距离.
float   GetPointDistance(const   PointF&   v2Pts_0,   const   PointF&   v2Pts_1)
{
          return   sqrt(abs((v2Pts_0.X-v2Pts_1.X)*(v2Pts_0.X-v2Pts_1.X)   +  
                            (v2Pts_0.Y-v2Pts_1.Y)*(v2Pts_0.Y-v2Pts_1.Y)));
}

------解决方案--------------------
if (lineCen > = radii)
return true;
else
return false;


线段横穿圆,或则在圆内,必然 lineCen < radii