Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个点阵列多边形的Javascript碰撞_Javascript_Arrays_Collision - Fatal编程技术网

两个点阵列多边形的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分离轴定理可以解决这个问题吗?这个库似乎可以解决你的问题,而且非常轻量级