Javascript столкновение двухугольников массива точек

1

Я искал по всему, и я нашел ответы на вопросы о прямоугольном круге и спрайте. Ничто, что обеспечивает обнаружение столкновений между двумя массивами точек, например,

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, когда одна или несколько точек внутри многоугольника других.

Теги:
arrays
collision

1 ответ

0
Лучший ответ

SAT.js был anser для меня, я просто помещал каждую точку в 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);

При этом он сопоставляет каждую точку полигону в системе координат, а затем проверяет его оттуда. Итак, collided= true

Ещё вопросы

Сообщество Overcoder
Наверх
Меню