/** * 2D几何计算工具类 * 提供通用的2D几何计算功能 */ import { Vec2d, VecLike } from './Vec2d'; import { LineSegmentLike } from './LineSegment'; import { CircleSegmentLike } from './CircleSegment'; /** * 几何计算工具类 */ export declare class GeometryUtils { /** * 计算两点之间的距离 */ static distance(p1: VecLike, p2: VecLike): number; /** * 计算点到圆弧的距离 */ static pointToCircleDistance(point: VecLike, circleSegment: CircleSegmentLike): number; /** * 计算点到线段的距离 */ static pointToLineDistance(point: VecLike, lineSegment: LineSegmentLike): number; /** * 获取距离点最近的线段 * @param point 点 * @param lineSegments 线段集合 * @returns 距离点最近的线段 */ static getNearestLineSegment(point: VecLike, lineSegments: LineSegmentLike[]): LineSegmentLike | null; /** * 获取某个点在某条直线上的基于某个轴的投影点 * @param point 点 * @param lineSegment 线段(内部需要把线段转换成直线, 然后计算投影点) * @param axis 轴 * @returns 投影点 */ static getProjectionPoint(point: VecLike, lineSegment: LineSegmentLike, axis: 'x' | 'y'): Vec2d; /** * 获取投影点并沿垂直于线段的方向偏移指定距离 * @param point 点 * @param lineSegment 线段 * @param axis 投影轴 * @param offsetDistance 偏移距离 * @param tolerance 容差 * @returns 偏移后的投影点 */ static getProjectionPointWithOffset(point: VecLike, lineSegment: LineSegmentLike, axis: 'x' | 'y', offsetDistance: number, tolerance?: number): Vec2d; /** * 计算点到直线的距离 */ static pointToLineThroughPointDistance(point: VecLike, linePoint: VecLike, lineDirection: VecLike): number; /** * 获取线段上最近的点 */ static nearestPointOnLineSegment(lineStart: VecLike, lineEnd: VecLike, point: VecLike, clamp?: boolean): Vec2d; /** * 计算两条线段的交点 */ static lineIntersection(line1Start: VecLike, line1End: VecLike, line2Start: VecLike, line2End: VecLike): Vec2d | null; /** * 判断点是否在多边形内 */ static pointInPolygon(point: VecLike, polygon: VecLike[]): boolean; /** * 计算多边形的质心 */ static polygonCentroid(points: VecLike[]): Vec2d; /** * 计算包围盒 */ static boundingBox(points: VecLike[]): { min: Vec2d; max: Vec2d; }; /** * 判断三点是否顺时针排列 */ static isClockwise(A: VecLike, B: VecLike, C: VecLike): boolean; /** * 计算三点形成的角度 */ static angleBetweenPoints(A: VecLike, B: VecLike, C: VecLike): number; /** * 根据圆心和半径,获取圆上的等份点 */ static getCirclePoints(center: VecLike, radius: number, segments?: number): Vec2d[]; /** * 根据圆心和起始点,获取圆弧上的等份点 */ static getArcPoints(center: VecLike, startPoint: VecLike, endAngle: number, segments?: number): Vec2d[]; /** * 计算点到点的中点 */ static midpoint(p1: VecLike, p2: VecLike): Vec2d; /** * 计算多个点的平均值 */ static average(points: VecLike[]): Vec2d; /** * 判断两个点是否接近 */ static isNear(p1: VecLike, p2: VecLike, tolerance?: number): boolean; }