Всем спасибо за ответы!
Мне помогла статья
Базовая теория столкновения объектов, спрайтов на .... Там же есть код для определения принадлежности точки полигону.
function pointInPoly(polyCords, pointX, pointY)
{
var i, j, c = 0;
for (i = 0, j = polyCords.length - 1; i < polyCords.length; j = i++)
{
if (((polyCords[i][1] > pointY) != (polyCords[j][1] > pointY)) && (pointX < (polyCords[j][0] - polyCords[i][0]) * (pointY - polyCords[i][1]) / (polyCords[j][1] - polyCords[i][1]) + polyCords[i][0]))
{
c = !c;
}
}
return c;
}
Также нашел код для определения пересечений полигонов.
function crossLine(l1,l2) {
var dx1 = l1[1][0] - l1[0][0],
dy1 = l1[1][1] - l1[0][1],
dx2 = l2[1][0] - l2[0][0],
dy2 = l2[1][1] - l2[0][1],
x = dy1 * dx2 - dy2 * dx1;
if(!x, !dx2) {
return false;
}
var y = l2[0][0] * l2[1][1] - l2[0][1] * l2[1][0];
x = ((l1[0][0] * l1[1][1] - l1[0][1] * l1[1][0]) * dx2 - y * dx1) / x;
y = (dy2 * x - y) / dx2;
return ((l1[0][0] <= x && l1[1][0] >= x) || (l1[1][0] <= x && l1[0][0] >= x)) &&
((l2[0][0] <= x && l2[1][0] >= x) || (l2[1][0] <= x && l2[0][0] >= x));
}
Но он не понадобился, так как у меня фигуры состоят из большого количества полигонов.