Я создаю движок лучевого вещания на javascript, используя p5js, и существует проблема с пересечением между линиями (лучевая передача к стене).
Я нашел много алгоритмов межстрочного сравнения, включая библиотеку столкновений p5, но проблема возникает в каждом из них.
this.intersects = function (raycastStart, raycastEnd) {
var x1 = this.startPoint.x; //Start point is the first point of a line.
var y1 = this.startPoint.y;
var x2 = this.endPoint.x; //End point is the second point of a line.
var y2 = this.endPoint.y;
var x3 = raycastStart.x;
var y3 = raycastStart.y;
var x4 = raycastEnd.x;
var y4 = raycastEnd.y;
var a_dx = x2 - x1;
var a_dy = y2 - y1;
var b_dx = x4 - x3;
var b_dy = y4 - y3;
var s = (-a_dy * (x1 - x3) + a_dx * (y1 - y3)) / (-b_dx * a_dy + a_dx * b_dy);
var t = (+b_dx * (y1 - y3) - b_dy * (x1 - x3)) / (-b_dx * a_dy + a_dx * b_dy);
//Vector2 is simply class with two fields: x and y.
return (s >= 0 && s <= 1 && t >= 0 && t <= 1) ? new Vector2(x1 + t * a_dx, y1 + t * a_dy) : null;
}
Столкновение между линиями работает с одной стороны правильно, а с другой - некорректно, в соответствии с моей позицией y.
Это моя карта.
с одной стороны он отлично работает
но с другой стороны, он проверяет столкновение для отрезков, которые ниже моей позиции Y