import { Vec2d, VecLike } from './Vec2d'; import { LineSegmentLike } from './LineSegment'; /** * 圆弧模型接口 */ export interface CircleSegmentModel { center: VecLike; radius: number; startAngle: number; endAngle: number; /** 绘制方向:1 表示顺时针,-1 表示逆时针 */ radian?: 1 | -1; } /** * 圆弧类型 */ export type CircleSegmentLike = CircleSegment | CircleSegmentModel; /** * 圆弧类 * 表示2D平面中的一段圆弧,由圆心、半径、起始角度和结束角度定义 */ export declare class CircleSegment { center: Vec2d; radius: number; startAngle: number; endAngle: number; /** 绘制方向:1 表示顺时针,-1 表示逆时针 */ radian: 1 | -1; constructor(center?: Vec2d, radius?: number, startAngle?: number, endAngle?: number, /** 绘制方向:1 表示顺时针,-1 表示逆时针 */ radian?: 1 | -1); /** * 设置圆弧的所有属性 * @param center 圆心 * @param radius 半径 * @param startAngle 起始角度(弧度) * @param endAngle 结束角度(弧度) * @param radian 绘制方向:1 表示顺时针,-1 表示逆时针 */ set(center: VecLike, radius: number, startAngle: number, endAngle: number, radian?: 1 | -1): CircleSegment; /** * 设置圆心 */ setCenter(center: VecLike): CircleSegment; /** * 设置半径 */ setRadius(radius: number): CircleSegment; /** * 设置起始角度 */ setStartAngle(startAngle: number): CircleSegment; /** * 设置结束角度 */ setEndAngle(endAngle: number): CircleSegment; /** * 克隆圆弧 */ clone(): CircleSegment; /** * 获取圆弧的长度 */ get length(): number; /** * 获取起始点 */ get startPoint(): Vec2d; /** * 获取结束点 */ get endPoint(): Vec2d; /** * 获取圆弧的中点 */ get midpoint(): Vec2d; /** * 获取圆弧的角度差 */ getAngleDifference(): number; /** * 获取考虑方向的有符号角度差 * radian = -1(逆时针):返回 [0, 2π] 的正向角度差 * radian = 1(顺时针):返回非正的角度差(<= 0),表示沿顺时针方向的角度 */ private getSignedAngleDifference; /** * 获取圆弧的包围盒 */ get boundingBox(): { min: Vec2d; max: Vec2d; }; /** * 判断给定的角度是否在圆弧范围内 */ containsAngle(angle: number): boolean; /** * 计算点到圆弧的距离 */ distanceToPoint(point: VecLike): number; /** * 获取圆弧上距离指定点最近的点 */ nearestPointOnSegment(point: VecLike, clamp?: boolean): Vec2d; /** * 判断点是否在圆弧上(考虑容差) */ containsPoint(point: VecLike, tolerance?: number): boolean; /** * 计算与线段的交点 */ intersection(other: LineSegmentLike): Vec2d[]; /** * 判断是否与线段相交 */ intersects(other: LineSegmentLike): boolean; /** * 平移圆弧 */ translate(offset: VecLike): CircleSegment; /** * 缩放圆弧(以圆心为中心) */ scale(factor: number): CircleSegment; /** * 缩放圆弧(以指定点为中心) */ scaleWithOrigin(factor: number, origin: VecLike): CircleSegment; /** * 旋转圆弧(以圆心为中心) */ rotate(angle: number): CircleSegment; /** * 旋转圆弧(以指定点为中心) */ rotateWithOrigin(angle: number, origin: VecLike): CircleSegment; /** * 将圆弧分割成指定数量的等长段 */ divide(segments: number): Vec2d[]; /** * 将圆弧分割成指定长度的段 */ divideByLength(segmentLength: number): Vec2d[]; /** * 获取圆弧上的点(参数化) */ getPointAt(t: number): Vec2d; /** * 判断两个圆弧是否相等 */ equals(other: CircleSegmentLike, tolerance?: number): boolean; /** * 转换为JSON对象 */ toJson(): CircleSegmentModel; /** * 转换为字符串 */ toString(): string; /** * 静态方法:从圆心、半径和角度创建圆弧 */ static from(center: VecLike, radius: number, startAngle: number, endAngle: number, radian?: 1 | -1): CircleSegment; /** * 静态方法:从圆心和两个点创建圆弧 */ static fromPoints(center: VecLike, startPoint: VecLike, endPoint: VecLike, radian?: 1 | -1): CircleSegment; /** * 静态方法:从JSON对象创建圆弧 */ static fromJson(json: CircleSegmentModel): CircleSegment; /** * 静态方法:计算点到圆弧的距离 */ static distanceToPoint(segment: CircleSegmentLike, point: VecLike): number; /** * 静态方法:判断点是否在圆弧上 */ static containsPoint(segment: CircleSegmentLike, point: VecLike, tolerance?: number): boolean; /** * 静态工具:将 CircleSegmentLike 统一转换为 JSON 模型 */ static toJson(segment: CircleSegmentLike): CircleSegmentModel; }