javascript多边形相交

javascript多边形相交,javascript,polygon,intersection,Javascript,Polygon,Intersection,我在以下方面使用了该代码: . 在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

我在以下方面使用了该代码: . 在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});
现在,当我在交叉之前移动另一个在这个形状内的三角形时,它给了我错误的交点。知道哪里出了问题吗?

好吧,我为其他想玩这个的人设置了一个游戏。结果如下:

该脚本使用了分离轴定理或(维基百科称之为分离轴定理),如
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) {

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

下面是我查找两个多边形的相交多边形的不太复杂的实现

它适用于凸多边形和凹多边形,但不适用于复杂(自相交)多边形。 该算法与中介绍的算法非常相似

它的复杂度约为4*n1*n2,其中n1和n2是正在计算其交点的多边形中的顶点数

它是一个单独的.js文件。“多边形”被视为二维点的任意javascript数组。“点”是任何具有x和y数字属性的javascript对象

在现有功能的基础上实现Union功能应该不是问题,我可能很快就会做到


我不明白你的问题:三角形怎么有6个点?坐标怎么会有负值?最后三个三角形不应该是三角形2,而不是三角形1吗?非常感谢。我想我会选择o(N2)算法,因为我的多边形不是很大,而且也不是很多。只是好奇为什么这不管用。非常感谢您提供的信息。您有什么想法来移动碰撞的形状吗?@yckart小提琴中有一点配置错误,JavaScript代码被包装在MooTools onLoad处理程序中,因此事件没有正确绑定。现在应该可以了,再试一次。@MattiasBuelens是的,很清楚。然而,我的意思是这样的:@MattiasBuelens到目前为止我已经做了一些事情:链接断开了。请在注释中包含代码。