如题,只要判断是否相交就可以了,可以不求交点的坐标。
相切也算是相交。
直线段定义是二端点坐标。
圆弧段是由园心点的坐标,半径,圆弧端点起始的角度,圆弧端点终点的角度定义
如果算交点的话注意可能直线段可能水平或垂直,故用正切或余切是要注意产能溢出或程序出错的情况。
算法尽量简单,因为它是在实时系统上跑的。
如能惠赐C程序更好。求大侠赐招,谢谢

解决方案 »

  1.   

    1)旋转坐标系,使得直线方向为x轴。
    2)计算直线的端点坐标s1,s2
    3) 计算曲线的端点横坐标,x1,x2
    4) 求s1,s2,x1,x2的重合部分,假定为s2, x1
    5) 计算曲线上s2,x1对应的纵坐标y1,y2
    6) 如果符号相反,则相交
      

  2.   

    http://topic.csdn.net/t/20021107/15/1156933.html
      

  3.   

    楼 上的介绍太麻烦。下面的较简单
    float cangel=(float)3.1415/(float)180.0;//角转换常数
    float new_linebasex=(linebasex-arccenterx)*(float)cos(lineangle*cangel)+(linebasey-arccentery)*(float)sin(lineangle*cangel);
    float new_linebasey=-(linebasex-arccenterx)*(float)sin(lineangle*cangel)+(linebasey-arccentery)*(float)cos(lineangle*cangel);
    //求直线二端点坐标,y点坐标相等
    float foreign_xa=new_linebasex+armlen;
    float foreign_xb=new_linebasex-balancelen;
    float foreign_y=new_linebasey;

    if(foreign_y>arcradius) 
    {
    return false;//无交点
    }
    else    //有一个或二个交点 求交点及横坐标
    {
    float xa=arcradius*arcradius-foreign_y*foreign_y;
    float a1_angle=(float)180.0/(float)3.1415*(float)asin(foreign_y/arcradius);
    float xb=-xa;
    float a2_angle=180-a1_angle;

    bool btemp1=(RegularAngle(a1_angle)>(RegularAngle(arclineangle)-RegularAngle(lineangle)-angleoffset))&&(RegularAngle(a1_angle)<(RegularAngle(arclineangle)-RegularAngle(lineangle)+angleoffset));//角度在二个夹角中间
    bool btemp2=(xa>MIN(foreign_xa,foreign_xb))&&(xa<MAX(foreign_xa,foreign_xb));//交点在线段中间

    bool btemp3=(RegularAngle(a2_angle)>(RegularAngle(arclineangle)-RegularAngle(lineangle)-angleoffset))&&(RegularAngle(a2_angle)<(RegularAngle(arclineangle)-RegularAngle(lineangle)+angleoffset));//角度在二个夹角中间
    bool btemp4=(xb>MIN(foreign_xa,foreign_xb))&&(xb<MAX(foreign_xa,foreign_xb));//交点在线段中间

    if((btemp1&&btemp2)||(btemp3&&btemp4))
    {
    return true;
    }
    else
    {
    return false;
    }