UNPKG

chartx

Version:

Data Visualization Chart Library

57 lines (55 loc) 1.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.lineLine = lineLine; exports.lineRect = lineRect; var _vec = _interopRequireDefault(require("vec2")); /** * !#en Test line and line * !#zh 测试线段与线段是否相交 * @method lineLine * @param {Vec2} a1 - The start point of the first line * @param {Vec2} a2 - The end point of the first line * @param {Vec2} b1 - The start point of the second line * @param {Vec2} b2 - The end point of the second line * @return {boolean} */ function lineLine(a1, a2, b1, b2) { // b1->b2向量 与 a1->b1向量的向量积 var ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x); // a1->a2向量 与 a1->b1向量的向量积 var ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x); // a1->a2向量 与 b1->b2向量的向量积 var u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); // u_b == 0时,角度为0或者180 平行或者共线不属于相交 if (u_b !== 0) { var ua = ua_t / u_b; var ub = ub_t / u_b; if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) { return true; } } return false; } /** * !#en Test line and rect * !#zh 测试线段与矩形是否相交 * @method lineRect * @param {Vec2} a1 - The start point of the line * @param {Vec2} a2 - The end point of the line * @param {Rect} b - The rect * @return {boolean} */ function lineRect(a1, a2, b) { var r0 = new _vec.default(b.x, b.y); var r1 = new _vec.default(b.x, b.yMax); var r2 = new _vec.default(b.xMax, b.yMax); var r3 = new _vec.default(b.xMax, b.y); if (lineLine(a1, a2, r0, r1)) return true; if (lineLine(a1, a2, r1, r2)) return true; if (lineLine(a1, a2, r2, r3)) return true; if (lineLine(a1, a2, r3, r0)) return true; return false; }