求两直线交点程序 C

const   double   EPS                 =   1e-5;           //   计算精度 
const   int   CROSS                   =   0;                 //   两直线相交 
const   int   COLINE                 =   1;                 //   两直线共线 
const   int   PARALLEL             =   2;                 //   两直线平行 
struct   Point   {                             //   二维点或矢量 
        double   x,   y; 
        Point()   {} 
        Point(double   x0,   double   y0):   x(x0),   y(y0)   {} 
}; 
struct   Line   {                               //   二维的直线或线段 
        Point   p1,   p2; 
        Line()   {} 
        Line(Point   p10,   Point   p20):   p1(p10),   p2(p20)   {} 
}; 
inline   bool   EQ(double   x,   double   y)             //   eqaul,   x   ==   y 

        return   (fabs(x   -   y)   <   EPS); 

//   计算两条二维直线的交点,结果在参数P中返回 
//   返回值说明了两条直线的位置关系 
//   COLINE       --   共线 
//   PARALLEL   --   平行 
//   CROSS         --   相交 
int   CalCrossPoint(Line   L1,   Line   L2,   Point&   P) 

        double   A1,   B1,   C1,   A2,   B2,   C2; 
        A1   =   L1.p2.y   -   L1.p1.y; 
        B1   =   L1.p1.x   -   L1.p2.x; 
        C1   =   L1.p2.x   *   L1.p1.y   -   L1.p1.x   *   L1.p2.y; 
        A2   =   L2.p2.y   -   L2.p1.y; 
        B2   =   L2.p1.x   -   L2.p2.x; 
        C2   =   L2.p2.x   *   L2.p1.y   -   L2.p1.x   *   L2.p2.y; 
        if   (EQ(A1   *   B2,   B1   *   A2))         { 
                if   (EQ(   (A1   +   B1)   *   C2,   (A2   +   B2)   *   C1   ))   { 
                        return   COLINE; 
                }   else   { 
                        return   PARALLEL; 
                } 
        }   else   { 
                P.x   =   (B2   *   C1   -   B1   *   C2)   /   (A2   *   B1   -   A1   *   B2); 
                P.y   =   (A1   *   C2   -   A2   *   C1)   /   (A2   *   B1   -   A1   *   B2); 
                return   CROSS; 
        } 

 

 

转自: http://topic.csdn.net/t/20021217/14/1269227.html#r_8206153


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值