diff --git a/html/images/space.svg b/html/images/space.svg index 70d6791..ff193e8 100644 --- a/html/images/space.svg +++ b/html/images/space.svg @@ -217,41 +217,20 @@ triangles.forEach(t => { const attr = t.getAttribute('points').split(delim); - const [[xa, ya], [xb, yb], [xc, yc]] = attr.map(t => t.split(',')); - - // https://en.wikipedia.org/wiki/Curve_orientation#Practical_considerations - // Determinant for a convex polygon - const det = (+xb - +xa) * (+yc - +ya) - (+xc - +xa) * (+yb - +ya); + const [a, b,] = attr.map(t => t.split(',')); + const cw = isClockwise(a, b, [positionX, positionY]); + const acute = isAcute(a, b, [positionX, positionY]); const pos = `${positionX},${positionY}`; - const isClockwise = det < 0; - let isAcute = false; - - if (isClockwise) { - const [[ax, ay], [bx, by], [shipx, shipy]] = - t.getAttribute('points').split(' ').map(n => n.split(',').map(n => +n)); - - const da = distance(ax, ay, shipx, shipy); - const db = distance(bx, by, shipx, shipy); - const dc = distance(ax, ay, bx, by); - - // https://en.wikipedia.org/wiki/Law_of_cosines - // Solve for angles alpha and beta with inverse cosine (arccosine) - const alpha = Math.acos((db ** 2 + dc ** 2 - da ** 2) / (2 * db * dc)); - const beta = Math.acos((da ** 2 + dc ** 2 - db ** 2) / (2 * da * dc)); - isAcute = alpha < halfPi && beta < halfPi; - } if (pos !== attr.pop()) { attr.push(pos); t.setAttribute('points', attr.join(delim)); } - if (drawCollisionLines) { - t.classList[isClockwise && isAcute ? "add" : "remove"](className); - t.classList[isClockwise && !isAcute ? "add" : "remove"]("obtuse"); - t.classList[!isClockwise ? "add" : "remove"]("anti-clockwise"); - } + t.classList[cw && acute ? "add" : "remove"](className); + t.classList[cw && !acute ? "add" : "remove"]("obtuse"); + t.classList[!cw ? "add" : "remove"]("anti-clockwise"); }); }