zoj 1280 || poj 1269 Intersecting Lines

211 篇文章 0 订阅
134 篇文章 1 订阅

给你两条直线,判断这两条直线是否共线,相交,不相交(即平行),相交的话输出交点。

 

判断平行,然后通过叉积判断是否共线。

 

平行判断可以判断两条直线的斜率是否相等。

 

交点的话,相当于联立方程组求解了。

 

这些方程看模板理解的,刚才搜了下,有人讲得比较清楚,借鉴下http://blog.csdn.net/dreamvyps/archive/2011/01/25/6162690.aspx

 

 

如何判断是否同线?由叉积的原理知道如果p1,p2,p3共线的话那么(p2-p1)X(p3-p1)=0。因此如果p1,p2,p3共线,p1,p2,p4共线,那么两条直线共线。direction()求叉积,叉积为0说明共线。

 

如何判断是否平行?由向量可以判断出两直线是否平行。如果两直线平行,那么向量p1p2、p3p4也是平等的。即((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0说明向量平等。

 

如何求出交点?这里也用到叉积的原理。假设交点为p0(x0,y0)。则有:

 

(p1-p0)X(p2-p0)=0

 

(p3-p0)X(p2-p0)=0

 

展开后即是

 

(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0

 

(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0

 

将x0,y0作为变量求解二元一次方程组。

 

假设有二元一次方程组

 

a1x+b1y+c1=0;

 

a2x+b2y+c2=0

 

那么

 

x=(c1*b2-c2*b1)/(a2*b1-a1*b2);

 

y=(a2*c1-a1*c2)/(a1*b2-a2*b1);

 

因为此处两直线不会平行,所以分母不会为0。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值