两个点阵列多边形的Javascript碰撞
我已经搜索了所有地方,并且我已经找到了矩形圆和精灵碰撞的答案。不能在两个点阵列之间提供碰撞检测,例如两个点阵列多边形的Javascript碰撞,javascript,arrays,collision,Javascript,Arrays,Collision,我已经搜索了所有地方,并且我已经找到了矩形圆和精灵碰撞的答案。不能在两个点阵列之间提供碰撞检测,例如 var poly1=[ [0,0], [20,50], [50,70], [70,20], [50,0] ]; // each point from one to the next represent a line in the shape, then the last point connects to the first to complete it.
var poly1=[
[0,0],
[20,50],
[50,70],
[70,20],
[50,0]
];
// each point from one to the next represent a line in the shape, then the last point connects to the first to complete it.
var poly2=[
[50,30],
[40,90],
[70,110],
[90,70],
[80,20]
];
var collided=arraysCollided(poly1,poly2);
有人知道图书馆可以做到这一点吗?我的研究没有得出任何支持这一点的结论,也没有与某些游戏引擎库相关联
例如,当一个或多个点位于另一个多边形内部时,会触发碰撞。SAT.js是我的答案,我只是将每个点放入
SAT.Vector
然后放入SAT.polygon
,然后用SAT.testpolygon(SAT.polygon,SAT.polygon)测试它们代码>
这样,它将每个点映射到坐标系上的一个多边形,然后从那里进行测试。因此,collide
=true
SAT.js是我的答案,我只是将每个点放入SAT.Vector
然后放入SAT.Polygon
,然后用SAT.testpolygon Polygon(SAT.Polygon,SAT.Polygon)测试它们代码>
这样,它将每个点映射到坐标系上的一个多边形,然后从那里进行测试。所以我检查了每个多边形的每个点是否在另一个多边形中。这是用于检查点是否位于多边形中的代码:
function pip(x, y, polygon) {
let odd = false;
let v = polygon.va; //The vertices array
let j = v.length - 2;
for (let i=0; i<v.length-1; i+=2) {
if ((v[i+1]<= y && v[j+1]>=y || v[j+1]<= y && v[i+1]>=y)
&& (v[i]<=x || v[j]<=x)) {
odd ^= (v[i] + (y-v[i+1])*(v[j]-v[i])/(v[j+1]-v[i+1])) < x;
}
j=i;
}
if(odd === false) odd = 0;
return odd;
}
函数pip(x,y,多边形){
让奇=假;
设v=polygon.va;//顶点数组
设j=v.length-2;
对于(设i=0;i我检查了每个多边形的每个点是否在另一个多边形中。这是检查点是否在多边形中的代码:
function pip(x, y, polygon) {
let odd = false;
let v = polygon.va; //The vertices array
let j = v.length - 2;
for (let i=0; i<v.length-1; i+=2) {
if ((v[i+1]<= y && v[j+1]>=y || v[j+1]<= y && v[i+1]>=y)
&& (v[i]<=x || v[j]<=x)) {
odd ^= (v[i] + (y-v[i+1])*(v[j]-v[i])/(v[j+1]-v[i+1])) < x;
}
j=i;
}
if(odd === false) odd = 0;
return odd;
}
函数pip(x,y,多边形){
让奇=假;
设v=polygon.va;//顶点数组
设j=v.length-2;
对于(设i=0;i什么被视为碰撞,您能提供一些所需的输出以及输入吗?如果其中一个多边形的一个点在另一个多边形的“内部”或“接触”,我们可以说它们发生了碰撞(取决于您的定义).你同意吗?好的,如果你同意,现在你需要解a。对,但这仍然只提供了一个矩形,而不是像你所说的变形多边形,就像问题中的那两个。@Theraot分离轴定理可以解决这个问题吗?这个库似乎可以解决你的问题,而且非常轻。你能提供什么被认为是碰撞吗一些所需的输出以及您的输入?如果其中一个多边形的一个点“在内部”或“接触”另一个,我们可以说它们发生了碰撞(取决于您的定义).你同意吗?好的,如果你同意,现在你需要解a。对,但这仍然只提供了一个矩形,而不是像你所说的变形多边形,就像问题中的那两个一样。@Theraot分离轴定理可以解决这个问题吗?这个库似乎可以解决你的问题,而且非常轻量级