比如我们,想画一个完整的闭合的矩形,那我们就不能让线段进行重叠


那线段重叠了,判断的方法呢

 canvas.onmouseup = function (e) {e = e || window.event;//let gx = e.clientX - canvas.getBoundingClientRect().left;//let gy = e.clientY - canvas.getBoundingClientRect().top;// 这个是画点的位置的 小矩形,方便 好看一些//ctx.clearRect(0,0,canvas.width,canvas.height);//ctx.drawImage(tc,0,0,canvas.width,canvas.height);//ctx.beginPath();//ctx.fillStyle = "rgb(255,255,255)";//ctx.fillRect(gx - 4, gy - 4, 8, 8);//ctx.moveTo(points[0].x,points[0].y);//for (let i = 0; i < points.length; i++) {//if (i >= 0) ctx.lineTo(points[i].x , points[i].y);//}//if(flag) ctx.closePath();//ctx.stroke();// points 存的是每个点的位置// const points = [//     {x: 344, y: 210.875},//     {x: 751, y: 138.875},//     {x: 710, y: 333.875},//     {x: 417, y: 401.875},//     {x: 416, y: 166.875}// ];for(let i=0,j=points.length; i< j; i++) {if(i>=1 && i<j-1) {let data = [];//这个的意思是把 每个点 都变成线段 看有没有重叠的data[0] = points[i-1];data[1] = points[i-0];data[2] = points[j-2];data[3] = points[j-1];if(intersects(data)) {// 有数据 说明已经有交叉的线段了// 你可以写相应的 报错提示信息//...}}}};// 确定是否有交叉口function intersects(seg) {let p = intersection(seg); p = p.split(",");let Boole = p[0] > Math.min(seg[0].x, seg[1].x) && p[0] < Math.max(seg[0].x, seg[1].x) && p[0] > Math.min(seg[2].x, seg[3].x) && p[0] < Math.max(seg[2].x, seg[3].x);if(Boole){return p;  }};function intersection(seg) {let x1 = seg[0].x,y1 = seg[0].y,x2 = seg[1].x,y2 = seg[1].y,x3 = seg[2].x,y3 = seg[2].y,x4 = seg[3].x,y4 = seg[3].y,nx, ny, d;d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);return Math.round(nx / d)+","+ Math.round(ny / d);};

Canvas判断线段是否重叠相关推荐

  1. java判断线段是否相交函数_计算几何-判断线段是否相交

    计算几何-判断线段相交 判断两线段是否相交: 快速排斥 跨立实验(这两个词也是我看博客的时候看到的,觉得挺高大上的就拿过来用了,哈哈哈) 1. 快速排斥:就是初步的判断一下,两条线段是不是相交,以两条 ...

  2. 1091 线段的重叠

    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 ...

  3. 小猿圈html5教程之canvas绘制线段方法

    HTML5现在是时下较火的编程语言之一,但是对于怎么学习很多朋友都是不了解的,不知道从何处下手,针对以上内容小猿圈web前端讲师每天会分享一个web前端知识,希望对你的前端学习有一定的帮助,今天分享的 ...

  4. POJ 1410 Intersection 判断线段交和点在矩形内 【计算几何】

    ACM博客_kuangbin POJ 1410 Intersection(判断线段交和点在矩形内) Intersection Time Limit: 1000MS   Memory Limit: 10 ...

  5. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  6. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks

    题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...

  7. 判断线段和直线相交 POJ 3304

    1 // 判断线段和直线相交 POJ 3304 2 // 思路: 3 // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. 4 5 #include ...

  8. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)

    1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...

  9. 几何常用算法与判断线段相交【转】

    下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心   -   代码角   找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...

最新文章

  1. 安装 mysql-8.0.23-winx64
  2. C++ Primer 5th笔记(chap 19 特殊工具与技术)定位 new 表达式
  3. Kafka的基本介绍和在linux的安装配置
  4. Java的并发编程中的多线程问题到底是怎么回事儿?
  5. 端午前夕的班级小游戏
  6. CentOS 7 / RHEL 7 systemd 指令
  7. Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
  8. dubbo学习总结三 消费端
  9. 手机wps取消不等宽分栏_如何取消分栏 - 卡饭网
  10. 机器学习-吴恩达-笔记-8-支持向量机
  11. 未来3-4周可能出现大规模病毒或安全***事件
  12. async/await 异步编程(转载)
  13. BSC(币安智能链)主网链部署
  14. java实现医嘱管理系统_Chis5.0医嘱管理系统业务使用手册
  15. 禁止浏览器自动填充用户名和密码
  16. Entersekt欢迎Nicolas Huss加入董事会
  17. 安全设置 不允许 html,当前安全设置不允许该文件,教您当前安全设置不允许该文件怎么解决...
  18. 惊鸿一现的永恒经典2007-05-07 09:40:18
  19. Unity InControl插件 按键映射对照表
  20. 拜占庭鲁棒Krum聚合算法

热门文章

  1. G-Nut/Anubis
  2. 如何在阿里云上配置安全规则用于开放3CX所需的端口?
  3. 该页面仅以HTML格式保存_学用系列PDF批注保存不容易!Ashampoo PDF PK 悦书PDF
  4. PMP考试易混淆知识点
  5. 周末用了下Google Allo:有些弱,百度度秘比它强
  6. 再见JCenter,将你的开源库发布到MavenCentral上吧
  7. Python-matplotlib制图05-添加图例和图例的细节调整
  8. 中国智慧出行行业投资规划研究与发展策略分析报告2022年版
  9. python自定义包出现ModuleNotFoundError: No module named ‘package_name‘故障
  10. 在uniapp开发中遇到的问题(agora声网进行视频通话)