全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前几天写过一篇文章:用js检测两个线段是否相交.可能大家不明白我的意图,因为这玩意看起来很无聊.今天就来点有用的,当然算法是基于上面这篇文章的,上面这篇文章是为了给这篇文章铺底.今天,我们要来判断下一个点是否在一个多边形内.为什么要检测一个点是否在多边形内,恩,主要是想用在canvas里来模拟底层的点击事件.要知道,canvas实际上是一个非常简单简洁的api,只提供了几个绘图api,非常底层,要利用这些简单的特性制造复杂的应用,需要一个框架,作为一个动画框架,最重要的除了时间线和精灵的概念,莫属于它的事件机制了.当我们把一个canvas封装成一个框架的时候,canvas里的东西都会被我们当成一个一个的对象,然后为了操作这些对象,我们需要知道我们的鼠标是否点在了这些对象上,是在拖动对象,还是点击了对象,还是离开了对象,我们需要把这些事件封装出来作为借口提供给框架使用者.然而,canvas没有给你提供任何事件,从底层来说,canvas内所有的事件都只是一个在canvas上触发的事件,例如canvas被点击了,被拖动了.对于在canvas里你点到了什么,点到了哪里,浏览器并没有提供原生的事件api.于是,我们需要自己来封装.canvas内的对象千奇百怪,但是从二维角度来说,其实任何对象都是又多边形组成的或者就是一个多边形,这个多边形,我们在程序中用它的顶点作为标记来存储.先看一个demo吧:(在现代浏览器中查看)/mj/version1.0.3/lab/point-rect-test.html判断一个点是否在多边形内的算法:有这样一个算法,假设现在有一个点和一个多边形,这个多边形可以是凸多边形也可以是凹多边形.找到这个点,然后从这个点水平往左画一条射线,方向指向左边,然后你找一下这条射线和多边形的各条边是否相交,统计一下相交的次数,如果相交偶数次,说明点在多边形外面,如果相交奇数次,说明点在多边形内.具体可以多画画试试.下面的程序中,点标识成对象x:*,y:*,而多边形则表示成点的数组,可以有任意个点组成.view sourceprint?01/计算向量叉乘02varcrossMul=function(v1,v2)03returnv1.x*v2.y-v1.y*v2.x;0405/判断两条线段是否相交06varcheckCross=function(p1,p2,p3,p4)07varv1=x:p1.x-p3.x,y:p1.y-p3.y,08v2=x:p2.x-p3.x,y:p2.y-p3.y,09v3=x:p4.x-p3.x,y:p4.y-p3.y,10v=crossMul(v1,v3)*crossMul(v2,v3)11v1=x:p3.x-p1.x,y:p3.y-p1.y12v2=x:p4.x-p1.x,y:p4.y-p1.y13v3=x:p2.x-p1.x,y:p2.y-p1.y14return(v=0&crossMul(v1,v3)*crossMul(v2,v3)=0)?true:false1516/判断点是否在多边形内17varcheckPP=function(point,polygon)18varp1,p2,p3,p419p1=point20p2=x:-100,y:point.y21varcount=022/对每条边都和射线作对比23for(vari=0;ipolygon.length-1;i+)24p3=polygoni25p4=polygoni+126if(checkCross(p1,p2,p3,p4)=true)27count+282930p3=polygonpolygon.length-131p4=polygon032if(checkCross(p1,p2,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶叶文化传承创新-洞察与解读
- 2025年中层管理岗位岗位招聘面试参考题库及参考答案
- 2025年银行理财顾问岗位招聘面试参考题库及参考答案
- 2025年K12教师岗位招聘面试参考试题及参考答案
- 2025年切割工岗位招聘面试参考题库及参考答案
- 2025年临床协调员岗位招聘面试参考题库及参考答案
- 2025年展会策划负责人岗位招聘面试参考题库及参考答案
- 2025年化妆品销售人员岗位招聘面试参考试题及参考答案
- 2025年企业策划专员岗位招聘面试参考试题及参考答案
- 2025年传统媒体记者岗位招聘面试参考试题及参考答案
- 2025年护士执业资格历年真题及答案
- 2025-2030工业机器人核心零部件国产化率提升路径专项研究报告
- 急性胰腺炎外科课件
- 提高接种率的课件
- 急性髓系白血病课件
- 木制品安全生产培训课件
- 2025年会计师事务所招聘审计师面试模拟题及应对技巧
- 电网消防知识培训课件
- 2024年甘肃省公务员考试申论真题(含答案)
- 湖北成人学士学位英语真题及答案
- 纳米材料止血技术-洞察及研究
评论
0/150
提交评论