增加工具方法
This commit is contained in:
parent
0a0cb0a77a
commit
dd429849dc
@ -517,3 +517,34 @@ export function angleOfIncludedAngle(
|
|||||||
}
|
}
|
||||||
return angle;
|
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; // 点不在线段上
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user