Files
lan-manager/web/node_modules/@antv/g-math/esm/line.js
openclaw 0a5f6a8047 Initial commit: Lan-manager project code
- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs

Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
2026-04-20 00:52:58 +08:00

97 lines
3.1 KiB
JavaScript

import { distance, getBBoxByArray } from './util';
import * as vec2 from 'gl-matrix/vec2';
export default {
/**
* 计算线段的包围盒
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @return {object} 包围盒对象
*/
box: function (x1, y1, x2, y2) {
return getBBoxByArray([x1, x2], [y1, y2]);
},
/**
* 线段的长度
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @return {number} 距离
*/
length: function (x1, y1, x2, y2) {
return distance(x1, y1, x2, y2);
},
/**
* 根据比例获取点
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @param {number} t 指定比例
* @return {object} 包含 x, y 的点
*/
pointAt: function (x1, y1, x2, y2, t) {
return {
x: (1 - t) * x1 + t * x2,
y: (1 - t) * y1 + t * y2,
};
},
/**
* 点到线段的距离
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @param {number} x 测试点 x
* @param {number} y 测试点 y
* @return {number} 距离
*/
pointDistance: function (x1, y1, x2, y2, x, y) {
// 投影距离 x1, y1 的向量,假设 p, p1, p2 三个点,投影点为 a
// p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)
var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);
if (cross < 0) {
return distance(x1, y1, x, y);
}
var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
if (cross > lengthSquare) {
return distance(x2, y2, x, y);
}
return this.pointToLine(x1, y1, x2, y2, x, y);
},
/**
* 点到直线的距离,而不是点到线段的距离
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @param {number} x 测试点 x
* @param {number} y 测试点 y
* @return {number} 距离
*/
pointToLine: function (x1, y1, x2, y2, x, y) {
var d = [x2 - x1, y2 - y1];
// 如果端点相等,则判定点到点的距离
if (vec2.exactEquals(d, [0, 0])) {
return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
}
var u = [-d[1], d[0]];
vec2.normalize(u, u);
var a = [x - x1, y - y1];
return Math.abs(vec2.dot(a, u));
},
/**
* 线段的角度
* @param {number} x1 起始点 x
* @param {number} y1 起始点 y
* @param {number} x2 结束点 x
* @param {number} y2 结束点 y
* @return {number} 导数
*/
tangentAngle: function (x1, y1, x2, y2) {
return Math.atan2(y2 - y1, x2 - x1);
},
};
//# sourceMappingURL=line.js.map