判断两条直线是否相交c语言,计算几何-两条线段是否相交(三种算法)

本文介绍了计算几何中判断两条线段是否相交的三种算法,包括线段AB与线段CD相交的基本条件、叉积判断法和行列式判断法,并提供了C语言的实现代码。算法3在测试中表现出最低的时间复杂度。
摘要由CSDN通过智能技术生成

原标题:计算几何-两条线段是否相交(三种算法)

计算几何中,判断线段是否相交是最基本的题目。 所谓几何, 最基本的当然就是坐标, 从坐标中我们可以知道位置和方向,比如:一个点就是一个位置,两点确定一条直线,从某点指向另一点的有向线段所在的直线是一向量。要处理几何题,我们又不得不涉及到叉积和点积, 判断线段相交就要用到叉积。

下面先讲讲相交的形式:

说到线段, 我们很自然想到直线,判断两条直线是否相交只需判断它们斜率是否相等,相等就为平行或重合, 不等就相交(注:判断相交我们不采用除法,因为除法容易产生浮点误差,当两条直线斜率接近时,很容易出错。 事实上,几乎所有几何题都不建议采用除法)。

线段相交有两种形式:

规范相交和 非规范相交 。 区别就是交点是否是其中一条线段的端点,不是的是规范相交。

对于线段A,B,如果 线段A与直线B相交 ,线段B与直线A相交 ,那么就可以认为线段A 和线段B相交。

关键问题是:如何判断直线AB是否与线段CD相交呢?

设直线AB的方程为:f(x,y) = 0,直线方程可以通过两点式求得。

当C和D点不在直线的同侧时,直线AB必然与线段CD相交,也就是说直线AB与线段CD相交的条件为:f(C) * f(D) <= 0。

代码如下:

typedefstructpoint

{

floatx;

floaty;

}Poin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值