gpt4 book ai didi

两个点数组多边形的Javascript碰撞

转载 作者:行者123 更新时间:2023-11-28 04:34:12 25 4
gpt4 key购买 nike

我到处搜索,找到了矩形圆和 Sprite 碰撞的答案。没有什么可以提供两个点数组之间的碰撞检测,例如,

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);

有人知道有一个库可以做到这一点吗?我的研究没有得出任何支持这一点的东西,并且与某些游戏引擎库无关。

例如,当一个或多个点位于另一个点的多边形内部时,true 会触发碰撞。

最佳答案

SAT.js 是我的答案,我只是将每个点放入 SAT.Vector 然后放入 SAT.Polygon,然后用 SAT 测试它们。 testPolygonPolygon(SAT.Polygon,SAT.Polygon);

var poly1={
name:"poly2",
x:400,
y:60,
rotation:0,
runner:function(){

},
points:[
[20,-50],
[-30,-50],
[-30,30],
[10,60],
[50,20]
]
};
var poly2={
name:"poly2",
x:50,
y:70,
runner:function(){
this.x+=1;
},
points:[
[-20,-40],
[-60,50],
[10,70],
[50,30],
[30,-20]
]
};
pGon=(poly)=>{
var center=SAT.Vector(0,0);
var pts=[];
for(var i in poly.points){
var point=poly.points[i];
// point = [0:x,1:y]
pts[pts.length]=new SAT.Vector(point[0]+poly.x,point[1]+poly.y);
}
var poly_a=new SAT.Polygon(center,pts);
return poly_a;
};
pCollide=(p1,p2)=>{
var p1_poly=pGon(p1);
var p2_poly=pGon(p2);
var res=new SAT.Response();
var collided=SAT.testPolygonPolygon(p1_poly,p2_poly,res);
console.log(collided);
console.log(res);
return collided;
};
var collided=pCollided(poly1,poly2);

这样,它将每个点映射到坐标系上的多边形,然后从那里进行测试。所以碰撞 = true

关于两个点数组多边形的Javascript碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44380311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com