求两条直线的交点

 大致思路是利用向量求交点的坐标

向量\underset{OX}{\rightarrow}就是交点坐标

\underset{OX}{\rightarrow}\underset{OA}{\rightarrow} +\underset{AB}{\rightarrow}*\frac{ax}{ab}

\frac{ax}{ab}就= \frac{\Delta acd }{\Delta acd +\Delta bcd } 

最后化简其实有更简单点的,这种一是好理解好计算,二是分母不容易为0

下面是代码实现,前面尽量用上判断平行再求交点

#define dou double
const dou EXP=1e-6;
struct P{
    double x,y;
    P(double x=0,double y=0):x(x),y(y){}
};
struct L{
    P a,b;
    L(){}
    L(P a,P b):a(a),b(b){}
};
double area(P a,P b,P c){                //求面积
    return fabs((b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y))/2;
}
P find(L x,L y)
{
    dou k=area(x.a,y.a,y.b)/(area(x.b,y.a,y.b)+area(x.a,y.a,y.b));
    return P(x.a.x+(x.b.x-x.a.x)*k,x.a.y+(x.b.y-x.a.y)*k);
}
					
bool par(L a,L b){                  //判断两线相平行(重合或平行)
    return fabs((a.b.x-a.a.x)*(b.b.y-b.a.y)-(b.b.x-b.a.x)*(a.b.y-a.a.y))<EXP;
}

main()

        if(par(x,y)){           //两线平行
            if(area(y.a,x.a,x.b)>EXP) 1;        //平行
            else 2;         //重合
        }
        else{
            P res=find(x,y);        //求交点
        }

if(par())是判断两条直线平行与否

如果平行(重合),那么不再求交点左边

反之,res接受结果

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

int 我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值