判断线段相交程序

    最近写程序用到,先上一段找来的别人的程序:







大致思路是分两步:

1. 一条线段大的坐标要比别一条小的坐标大

2. 一条线段的两个端点在另一线段的两边(通过比较叉乘得到)



按照段代码,写到程序里,一般运行没什么问题,但总是有时候会有些问题,相交判断不准确。于是开始怀疑这个算法的正确性,经手算验证后发现这段代码没问题。经过反复测试,才发问题确实出在这段代码上。最后才发现问题所在:溢出。

对于一个16位表示的int,其表示范围在–32,768 到 32,767。在我的实际程序中
的坐标范围是800*480,坐标略大的话,Multi之后的结果就超 出32767。

于是改用32位长的int,这样能够正确表示Multi的结果,但是对于下面这段代码:

(multi(s2, e1, s1) * multi(e1, e2, s1) >= 0) && (multi(s1, e2, s2) * multi(e2, e1, s2) >= 0)

multi的结果相乘后仍将溢出,可以改为逻辑判断解决。修改后使用如下的代码:




终于,运行正常~





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值