如何设计出一个好网站,做网站一年百万,代理网络手游,深圳安鸿源建设网站问题
现有已知折线 有多段#xff0c;当双击折线的时候#xff0c;需要将该双击的位置点Q 添加到折线上#xff08;排除端点情况#xff09;#xff0c;如何去判断Q要添加在折线的哪一段#xff0c;或者Q分割了折线的哪一段#xff1f;#xff1f;
分析
方式1 一开始…问题
现有已知折线 有多段当双击折线的时候需要将该双击的位置点Q 添加到折线上排除端点情况如何去判断Q要添加在折线的哪一段或者Q分割了折线的哪一段
分析
方式1 一开始选用斜率计算即平面中三点m,n,Q, Q与m,n 任意一点连线的斜率 与 m,n 连线斜率相同则三点共线与之相似的还有计算向量叉乘等都是基于斜率的判断这思路在纯粹的数学模型中是没问题的但是在js中会有以下问题
js浮点运算并不准确在计算斜率的时候会丢失精度即使设置了阈值但是精度丢失的程度根据m,n两点连线的斜率有关因此并不能有效的设置阈值无效的阈值是指当阈值较小的时候计算误差会容易大于阈值导致新增点不属于任何线段当阈值较大的时候计算误差会容易小于阈值导致新增点永远被判定为最后一段。
方式二 鉴于以上测试结果使用另一个判断标准点到直线的距离即使浮点运算不准确仍可以设置一个有效的阈值当Q距离已知线段的距离为[0阈值]且与线段两端点方向相反区分多端斜率相同的线段的时候就判断Q在直线上。 实际开发中需要分析线宽新增折点触发时机等设置具体的阈值