From f42cc2895fc3c402d3f8619b9ee5c906c8828ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Mon, 16 Aug 2021 21:17:57 +0200 Subject: [PATCH] refactor: don't compute same divisor twice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Jaenisch --- src/js/collisions.js | 16 +++++----------- types/collisions.d.ts | 1 + 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/js/collisions.js b/src/js/collisions.js index 3c8badf..e6cb7af 100644 --- a/src/js/collisions.js +++ b/src/js/collisions.js @@ -49,18 +49,12 @@ export function testCollision (shape1, shape2) { * @param {Array} vertices * @returns {boolean} * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line_segment} + * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule} */ export function testIntersection ([v1, v2, v3, v4]) { - const tdivisor = determinant(subtract(v1, v2), subtract(v3, v4)) + const divisor = determinant(subtract(v1, v2), subtract(v3, v4)) - if (tdivisor === 0) { - // Parallel lines never intersect - return false - } - - const udivisor = determinant(subtract(v1, v2), subtract(v3, v4)) - - if (udivisor === 0) { + if (divisor === 0) { // Parallel lines never intersect return false } @@ -68,8 +62,8 @@ export function testIntersection ([v1, v2, v3, v4]) { const tdivident = determinant(subtract(v1, v3), subtract(v3, v4)) const udivident = determinant(subtract(v2, v1), subtract(v1, v3)) // + 0 turns -0 into +0 - const t = tdivident / tdivisor + 0 - const u = udivident / udivisor + 0 + const t = tdivident / divisor + 0 + const u = udivident / divisor + 0 return (t >= 0 && t <= 1) && (u >= 0 && u <= 1) } diff --git a/types/collisions.d.ts b/types/collisions.d.ts index ade5b32..385b229 100644 --- a/types/collisions.d.ts +++ b/types/collisions.d.ts @@ -22,6 +22,7 @@ export function testCollision(shape1: Shape, shape2: Shape): boolean; * @param {Array} vertices * @returns {boolean} * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line_segment} + * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule} */ export function testIntersection([v1, v2, v3, v4]: Array): boolean; export type Shape = import('./shape').Shape;