import { Vec2d, VecLike } from './Vec2d'; import { Point2d } from './Point2d'; /** * 线段模型接口 */ export interface LineSegmentModel { start: VecLike; end: VecLike; } /** * 线段类型 */ export type LineSegmentLike = LineSegment | LineSegmentModel; /** * 线段类 * 表示2D平面中的一条线段,由起点和终点定义 */ export declare class LineSegment { start: Vec2d; end: Vec2d; constructor(start?: Vec2d, end?: Vec2d); /** * 设置线段的起点和终点 */ set(start: VecLike, end: VecLike): LineSegment; /** * 设置起点 */ setStart(point: VecLike): LineSegment; /** * 设置终点 */ setEnd(point: VecLike): LineSegment; /** * 克隆线段 */ clone(): LineSegment; /** * 获取线段的长度 */ get length(): number; /** * 获取线段的长度平方(用于性能优化) */ get lengthSquared(): number; /** * 获取线段的中点 */ get midpoint(): Vec2d; /** * 获取线段的方向向量(单位向量) */ get direction(): Vec2d; /** * 获取线段的法向量(垂直于线段) */ get normal(): Vec2d; /** * 获取线段的包围盒 */ get boundingBox(): { min: Vec2d; max: Vec2d; }; /** * 计算点到线段的距离 */ distanceToPoint(point: VecLike): number; /** * 获取线段上距离指定点最近的点 */ nearestPointOnSegment(point: VecLike, clamp?: boolean): Vec2d; /** * 判断点是否在线段上(考虑容差) */ containsPoint(point: VecLike, tolerance?: number): boolean; /** * 判断点是否在线段上(精确判断) */ containsPointExact(point: VecLike): boolean; /** * 计算与另一条线段的交点 */ intersection(other: LineSegmentLike): Vec2d | null; /** * 判断是否与另一条线段相交 */ intersects(other: LineSegmentLike): boolean; /** * 判断是否与另一条线段平行 */ isParallel(other: LineSegmentLike): boolean; /** * 判断是否与另一条线段垂直 */ isPerpendicular(other: LineSegmentLike): boolean; /** * 计算与另一条线段的夹角(弧度) */ angleTo(other: LineSegmentLike): number; /** * 计算与另一条线段的夹角(度数) */ angleToDegrees(other: LineSegmentLike): number; /** * 平移线段 */ translate(offset: VecLike): LineSegment; /** * 缩放线段(以起点为中心) */ scale(factor: number): LineSegment; /** * 缩放线段(以指定点为中心) */ scaleWithOrigin(factor: number, origin: VecLike): LineSegment; /** * 旋转线段(以起点为中心) */ rotate(angle: number): LineSegment; /** * 旋转线段(以指定点为中心) * angle: 旋转角度 * origin: 旋转中心点 */ rotateWithOrigin(angle: number, origin: VecLike): LineSegment; /** * 将线段分割成指定数量的等长段 */ divide(segments: number): Vec2d[]; /** * 将线段分割成指定长度的段 */ divideByLength(segmentLength: number): Vec2d[]; /** * 获取线段上的点(参数化) */ getPointAt(t: number): Vec2d; /** * 判断两条线段是否相等 */ equals(other: LineSegmentLike, tolerance?: number): boolean; /** * 转换为Point2d数组 */ toPoint2dArray(): Point2d[]; /** * 转换为Vec2d数组 */ toVec2dArray(): Vec2d[]; /** * 转换为JSON对象 */ toJson(): LineSegmentModel; /** * 转换为字符串 */ toString(): string; /** * 静态方法:从两个点创建线段 */ static fromPoints(start: VecLike, end: VecLike): LineSegment; /** * 静态方法:从Point2d数组创建线段 */ static fromPoint2dArray(points: Point2d[]): LineSegment; /** * 静态方法:从JSON对象创建线段 */ static fromJson(json: LineSegmentModel): LineSegment; /** * 静态方法:计算两条线段的交点 */ static intersection(seg1: LineSegmentLike, seg2: LineSegmentLike): Vec2d | null; /** * 静态方法:判断两条线段是否相交 */ static intersects(seg1: LineSegmentLike, seg2: LineSegmentLike): boolean; /** * 静态方法:计算点到线段的距离 */ static distanceToPoint(segment: LineSegmentLike, point: VecLike): number; }