@three3d/tools
Version:
@three3d/tools 提供了 ThreeJS 常用的工具库
236 lines • 5.97 kB
TypeScript
import type { Curve, Vector } from "three";
import { Vector3 } from "three";
/**
* 获取曲线的累积段长度的列表。
* @param curve - 曲线
* @param divisions - 要将曲线划分为的分段数;默认是 `curve.arcLengthDivisions`
* @returns
*/
export declare function getCurveULengths<T extends Vector>(curve: Curve<T>, divisions?: number): {
lengths: number[];
length: number;
};
/**
* 获取u列表对应的曲线累积长度列表。
* @param curve - 曲线
* @param ts - t 列表
* @param isU - 是否将 ts 列表中的 t 作为 u 来使用
* @returns
*/
export declare function getLengthsOfTs<T extends Vector>(curve: Curve<T>, ts: number[], isU?: boolean): {
lengths: number[];
length: number;
};
/**
* 采样选项
*/
export interface SampleOptions {
/**
* 采样长度
* @remarks
* 多长的弧长长度会生成一个采样点
*
* `sampleNum` 和 `sampleLength` 只需要其一;优先使用 `sampleLength`
*
* @defaultValue 1
*/
sampleLength?: number;
/**
* 采样个数
* @remarks
* 生成多少个采样点;
*
* `sampleNum` 和 `sampleLength` 只需要其一;优先使用 `sampleLength`
*/
sampleNum?: number;
}
/**
* 获取采样数(整数)
* @remarks
* 优先使用 `sampleLength` 选项;
* @param options - 采样选项
* @param length - 曲线总长度
* @returns
*/
export declare function getSampleNum(options: SampleOptions, length: number): number;
/**
* 获取曲线的分段和长度
* @param options
* @returns
*/
export declare function getCurveDivisionLength(options: SampleOptions & {
curve: Curve<Vector3>;
}): {
length: number;
division: number;
};
export declare enum DirectionSide {
/**
* 前面
*/
back = "back",
/**
* 后面
*/
front = "front"
}
/**
* getCurvePointAwayFrom 的选项
*/
export interface GetCurvePointAwayFromOptions<T extends Vector> {
/**
* 曲线
*/
curve: Curve<T>;
/**
* 距离
* @remarks
* 与 fromU 相隔的距离
*/
distance: number;
/**
* 起点
*
* @defaultValue 0
*/
fromU?: number;
/**
* 曲线的长度
* @remarks
* 用于节约计算,不传时,会自动从 curve 上获取
*/
length?: number;
/**
* 查找的方向
*/
side?: DirectionSide;
/**
* 距离容差
* @remarks
* 在容差范围呢视为等距
*/
tolerance?: number;
}
interface GetCurvePointAwayFrom_Result<T extends Vector> {
/**
* 是否成功找到符合条件的点
*/
succeed: boolean;
/**
* 最后查找到的点的u
*/
u: number;
/**
* 最后查找到的点
*/
point: T;
/**
* 最后查找到的点的距离
*/
distance: number;
}
/**
* 获取曲线上与指定位置(fromU)相距一定距离的点
* @param options - 选项
* @returns
*/
export declare function getCurvePointAwayFrom<T extends Vector>(options: GetCurvePointAwayFromOptions<T>): GetCurvePointAwayFrom_Result<T>;
/**
* getCurvePointAwayFromOrigin 的选项
*/
export interface GetCurvePointAwayFromOriginOptions<T extends Vector> extends Omit<GetCurvePointAwayFromOptions<T>, "side"> {
origin: T;
}
export declare function getCurvePointAwayFromOrigin<T extends Vector>(options: GetCurvePointAwayFromOriginOptions<T>): {
u: number;
point: T;
} | null;
/**
* FrenetFrame列表
* @remarks
* 各个列表的长度相等
*/
export interface FrenetFrames {
/**
* 切线列表;为z轴
*/
tangents: Vector3[];
/**
* 法线列表;作为x轴
*/
normals: Vector3[];
/**
* 副法线列表;作为y轴
*/
binormals: Vector3[];
}
export interface FrenetFrameLocations {
/**
* u或t的列表
*/
uts: number[];
/**
* 点列表
*/
points: Vector3[];
/**
* 长度信息
*/
lengths: number[];
}
export type FrenetFramesInfo = FrenetFrames & FrenetFrameLocations;
export type UT_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "uts">;
export type UT_Point_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "uts" | "points">;
export type Point_Length_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "points" | "lengths">;
/**
* 通过等分t的方式计算曲线的 FrenetFrames
* @param curve
* @param division
* @param up
* @returns
*/
export declare function computeCurveFrenetFramesByT(curve: Curve<Vector3>, division: number, up: Vector3): UT_Point_FrenetFrames;
/**
* 通过等分u的方式计算曲线的 FrenetFrames
* @param curve
* @param division
* @param up
* @returns
*/
export declare function computeCurveFrenetFramesByU(curve: Curve<Vector3>, division: number, up: Vector3, closed?: Boolean): UT_Point_FrenetFrames;
/**
* 通过固定up方向的方式计算曲线的 FrenetFrames
* @param curve
* @param division
* @param up
* @param useU - 是否使用分分u的方式;
* @returns
*/
export declare function computeCurveFrenetFramesByFixUp(curve: Curve<Vector3>, division: number, up: Vector3, useU?: boolean): UT_Point_FrenetFrames;
export interface ComputeCurveFrenetFramesOptions {
/**
* 是否使用等分u的方式
*/
useU?: boolean;
/**
* 是否固定 up;保证up不变
*/
fixUp?: boolean;
/**
* 是否墨盒曲线
* @remarks
* 只有在 useU 为 true 且 fixUp 为 false 的情况下才有效
* @defaultValue 曲线的 autoClose 属性值
*/
closed?: Boolean;
}
/**计算曲线的 FrenetFrames
* @param curve
* @param division
* @param up
* @param options
* @returns
*/
export declare function computeCurveFrenetFrames(curve: Curve<Vector3>, division: number, up: Vector3, options?: ComputeCurveFrenetFramesOptions): UT_Point_FrenetFrames;
export {};
//# sourceMappingURL=curve.d.ts.map