问题

现有已知折线 有多段,当双击折线的时候,需要将该双击的位置点Q 添加到折线上(排除端点情况),如何去判断Q要添加在折线的哪一段,或者Q分割了折线的哪一段??

分析

方式1
一开始选用斜率计算,即平面中三点m,n,Q, Q与m,n 任意一点连线的斜率 与 m,n 连线斜率相同,则三点共线(与之相似的还有计算向量叉乘等,都是基于斜率的判断),这思路在纯粹的数学模型中是没问题的,但是在js中会有以下问题

  • js浮点运算并不准确,在计算斜率的时候会丢失精度
  • 即使设置了阈值,但是精度丢失的程度根据m,n两点连线的斜率有关,因此并不能有效的设置阈值,无效的阈值是指,当阈值较小的时候,计算误差会容易大于阈值,导致新增点不属于任何线段,当阈值较大的时候,计算误差会容易小于阈值,导致新增点永远被判定为最后一段。

方式二
鉴于以上测试结果,使用另一个判断标准,点到直线的距离,即使浮点运算不准确,仍可以设置一个有效的阈值,当Q距离已知线段的距离为[0,阈值],且与线段两端点方向相反(区分多端斜率相同的线段)的时候就判断Q在直线上。
实际开发中需要分析线宽,新增折点触发时机等设置具体的阈值

svg 折线添加新的折点相关推荐

  1. html5 svg特性,HTML5新特性——HTML 5 Canvas vs. SVG

    Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...

  2. Ubuntu下添加新分区并设置挂载点

    Ubuntu下添加新分区并设置挂载点 最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小,这 ...

  3. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  4. linux系统下添加新硬盘的方法详解

    对于linux新手来说,在linux上添加新硬盘,是很有挑战性的一项工作. 在Linux服务器上把硬盘接好,启动linux,以root登陆. fdisk -l ## 这里是查看目前系统上有几块硬盘 D ...

  5. 深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

    编译 | 庞佳 责编 | Leo 出品 | AI 科技大本营(公众号ID:rgznai100) AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上 ...

  6. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

    今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的.所以,在面试过程中,面试官比较偏向于问技术型的问题.不过,技术终归还是要服务于业务的 ...

  7. Linux下对文件的操作及添加新用户

    Linux下对文件的操作及添加新用户 一.对文件的操作 1.打包压缩文件 2.解压缩文件 3.对文件操作的其他命令 二.创建新用户 一.对文件的操作 1.打包压缩文件 2.解压缩文件 3.对文件操作的 ...

  8. R语言为dataframe添加新的数据列(add new columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(add new columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dataframe

  9. R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(横向拼接.Appending columns,Unioning columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dat

最新文章

  1. [1维粒子模拟 version3.6]成功调试read input parameters
  2. linux多线程信号总结
  3. MariaDB 加密特性及使用方法
  4. 前端学习(3117):react-hello-react的类中的方法
  5. [css] 请说说CSS3实现文本效果的属性有哪些?
  6. php mysql foreach_php foreach输出两次
  7. 看风水用什么罗盘最好_兰花用什么土最好
  8. vue取div当前宽度_【前端大神面考面试官系列】入门Vue全家桶
  9. java compiler = null_Java Compiler command()方法
  10. MySQL读写分离详解(一)——基本原理
  11. LCN根据官网改造本项目失败案例
  12. html中选择器是什么意思,css中的选择器是什么意思?
  13. java 调用gephi_Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用
  14. android o 开发者大会,谷歌开发者大会刚结束Android O又要来了?
  15. 谁说Source Insight只能看C盘的文件?我有妙招!
  16. 让人春分日 哈工科教115166.弹珠游戏
  17. Provides transitive vulnerable dependency - Intellij IDEA
  18. SEO互帮团真诚奉献:一百多个站长论坛!
  19. JAVA中类、对象、方法之间的关联关系
  20. 腾讯正式推出QQ宠物结婚系统

热门文章

  1. python中序列(列表list和元组tuple)的用法
  2. Ubuntu 安装和使用 jupyter 出现的问题总结
  3. 自定义控件之瀑布流与水波纹实现
  4. 深入了解Struts2返回JSON数据的原理及具体应用范例
  5. try-catch-finally-return执行路径总结
  6. 小米鸿蒙1001小米鸿蒙,小米高管早就放下狠话!愿意使用鸿蒙2.0系统:那其他厂商呢?...
  7. java web swing 教程_好程序员Java教程解读什么是swing
  8. C语言学习及应用笔记之一:C运算符优先级及使用问题
  9. java post请求返回500错误信息_Retrofit API Post call 返回错误 500,适用于 Postman
  10. java或异运算_java中与运算,或运算,异或运算,取反运算