几何计算中的bug:必须合理设置float tolerance

之前在项目中实现了一套基于包围盒的寻路算法,但前几天无意中发现一个bug,导致角色被粘在一个圆形上,根据检查,发现是计算线段与圆交点时出的错,计算交点的算法给出了两个点的结果,但是判断是否在线段上时,被剔除了一个点。跟进去看了一下现场的情况,发现在比较边界时,出现了一个很明显的精度误差。

float 的 349.756256 与 349.756287,相差0.000031,之前设置的 float tolerance 是 1e-05f,但是这个误差明显大于这个值,后来考虑一下,因为我们地图用的尺度非常大,所以这个误差随着数值的变大只可能越来越大(float本身的误差问题),因为我们用的尺度大概在0-1000之间,所以,考虑到浮点数本身的精度问题,浮点数在表达1000左右的数值的时候,误差大概是 (1024-512)/ 8388608 约等于 0.00006103515625,也就是说,原来的0.00001的精度误差是不足以修正错误的。因此,考虑到各种情况,将float tolerance设置到0.0001解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值