From dd429849dc2ba010b293f58f4980043eba4a6ec6 Mon Sep 17 00:00:00 2001 From: fan Date: Thu, 13 Jul 2023 16:10:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B7=A5=E5=85=B7=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/jlgraphic/utils/GraphicUtils.ts | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/jlgraphic/utils/GraphicUtils.ts b/src/jlgraphic/utils/GraphicUtils.ts index 362935e..9023ff9 100644 --- a/src/jlgraphic/utils/GraphicUtils.ts +++ b/src/jlgraphic/utils/GraphicUtils.ts @@ -517,3 +517,34 @@ export function angleOfIncludedAngle( } return angle; } +/** + * 判断点是否在线段上 + * @param point 判断点 + * @param start 线段起点 + * @param end 线段终点 + * @returns + */ +export function isPointOnLineSegment( + point: IPointData, + start: IPointData, + end: IPointData +) { + // 计算向量AB和向量AC的叉积 + const crossProduct = + (end.y - start.y) * (point.x - start.x) - + (end.x - start.x) * (point.y - start.y); + + // 如果叉积为0,则点在直线上 + if (crossProduct === 0) { + // 接下来判断点是否在线段上 + if ( + point.x >= Math.min(start.x, end.x) && + point.x <= Math.max(start.x, end.x) && + point.y >= Math.min(start.y, end.y) && + point.y <= Math.max(start.y, end.y) + ) { + return true; // 点在线段上 + } + } + return false; // 点不在线段上 +}