Estoy tratando de hacer un algoritmo de emisión de rayos usando p5.js (no muy eficientemente) y tengo configurada casi toda la colisión. Lanzo un rayo hacia el borde de cada límite (todavía tengo que codificar el rayo que va más allá del borde del límite), y funciona perfectamente . Entonces, mi único problema es que los rayos, obviamente, a veces atraviesan otros límites. Entonces, hice un bucle for que pasa por cada límite y arroja un rayo en el mismo ángulo que tenía antes. Si hay una intersección, devuelvo la magnitud del rayo. Si no, devuelvo Infinity. A continuación, encuentro el índice del valor mínimo en la matriz, que parece funcionar. Esto significa que cualquiera que sea el índice del valor mínimo, es el índice del límite con el que quiero calcular una intersección. El código de la función es el siguiente:
//a = ray position x, b = ray position y, c = ray position + ray direction x, d = ray position + ray direction y //the array bounds is array of Bound objects //intersect() calculates if a ray and a line segment intersect and if so returns a vector with intersection point, otherwise returns vector of 0, 0 function findShortest(a, b, c, d) { shortestPossibilities = []; for(var i = 0; i < bounds.length; i ++) { if(intersect(a, b, c, d, bounds[i].x1, bounds[i].y1, bounds[i].x2, bounds[i].y2).mag() !== 0) { //add magnitude of intersection sPoss.push(intersect(a, b, c, d, bounds[i].x1, bounds[i].y1, bounds[i].x2, bounds[i].y2).mag()); } else { //impossible to be smallest sPoss.push(Infinity); } } //find smallest value var minVal = Math.min(...sPoss); var indexOfVal = sPoss.indexOf(minVal); return indexOfVal; } Sin embargo, esto no funciona. Traté de ver por qué no funcionaba asignando a cada límite un nuevo color ([0] = blanco, 1 = gris, [2] = naranja, [3] = amarillo, [4] = verde, [5] = cian, [6] = azul, [7+] = púrpura). Parece que encontrar el límite más cercano solo funciona si el límite más cercano tiene un índice más bajo que el límite original al que apuntaba el rayo, como se ve: 
¿Alguien sabe qué hice mal?