ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript多边形交集

2019-07-16 18:37:02  阅读:471  来源: 互联网

标签:javascript polygon intersection


我使用了以下代码:
http://www.amphibian.com/blogstuff/collision.html.在html测试文件中我将第一个三角形更改为

triangle1.addPoint({"x":-20, "y":-20});
triangle1.addPoint({"x":-20, "y":20});
triangle1.addPoint({"x":20, "y":20});
triangle1.addPoint({"x":20, "y":10});
triangle1.addPoint({"x":10, "y":10});
triangle1.addPoint({"x":10, "y":-20});

现在,当我在穿过它之前移动另一个三角形内部这个形状给我错误的交叉点.知道哪里可能是问题?

解决方法:

好吧,我为其他想要玩这个的人设置了fiddle.结果如下:

该脚本使用了分离轴定理或(如维基百科所称)Hyperplane separation theorem,如polygon.js的源代码所述:

/*
 *  To detect intersection with another Polygon object, this
 *  function uses the Separating Axis Theorem. It returns false
 *  if there is no intersection, or an object if there is. The object
 *  contains 2 fields, overlap and axis. Moving the polygon by overlap
 *  on axis will get the polygons out of intersection.
 */
Polygon.prototype.intersectsWith = function(other) {

该定理仅适用于凸多边形.你的形状不凸,因为它有一个“凹痕”.这就是脚本错误地报告形状相交的原因.如果你需要使它与凹形一起工作,你必须首先将凹形分割成单独的凸形部分然后将该定理应用于所有单独的部分.显然,这会使脚本更复杂,因为您需要迭代两个形状的凹陷部分的叉积.

标签:javascript,polygon,intersection
来源: https://codeday.me/bug/20190716/1480811.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有