src/engine/utils/PointerChecker.js (28 lines of code) (raw):

/* * Copyright 2021 EPAM Systems, Inc. (https://www.epam.com/) * SPDX-License-Identifier: Apache-2.0 */ /** * This is a tool for checking whether a pointer is on the line * @module demo/engine/utils/tool */ // absolute imports /** * Class PointerChecker to check if the point is on the line * @class PointerChecker */ class PointerChecker { static isPointerOnLine(vs, ve, vScr) { // The distance to the line by "x" and "y" const MIN_DIST = 10; // Define the center point of the line by "y" coordinate const centerLineY = (vs.y + ve.y) / 2; // Define the angle slope of the line const m = (ve.y - vs.y) / (ve.x - vs.x); // Define the intercept of the line const b = vs.y - m * vs.x; // Define the length of the line by "y" const widthY = Math.abs(ve.y - vs.y); // Check if the point is on the border of the line if ( vs.x != ve.x && (vs.x < ve.x ? vScr.x >= vs.x && vScr.x <= ve.x : vScr.x <= vs.x && vScr.x >= ve.x) && Math.floor(vScr.y) >= Math.floor(m * vScr.x + b) - MIN_DIST && Math.floor(vScr.y) <= Math.floor(m * vScr.x + b) + MIN_DIST ) { return true; } // Check if the point is on the border of the vertical line if ( vs.x === ve.x && vScr.x <= vs.x + MIN_DIST && vScr.x >= vs.x - MIN_DIST && vScr.y >= centerLineY - widthY / 2 && vScr.y <= centerLineY + widthY / 2 ) { return true; } } } export default PointerChecker;