A high-performance TypeScript library for working with 2D points and vectors, supporting Float32Array, Float64Array, and plain arrays.
Float32Array、Float64Array 和普通数组),使其灵活且适合性能关键的应用。
Float32Array、Float64Array 和普通 JavaScript 数组。
bash
npm install pnt2
`
或者使用 Yarn:
`bash
yarn add pnt2
`
使用方法
$3
以下是如何使用 PNT2 创建一个二维点、对其进行缩放并计算其长度的示例:
`typescript
import { create, scale, length } from 'pnt2';
// 创建一个新的二维点 [1, 2]
const point = create();
point[0] = 1;
point[1] = 2;
// 将点按因子 2 缩放
scale(point, point, 2);
// 计算缩放后点的长度
const len = length(point);
console.log(缩放后的点: [${point[0]}, ${point[1]}], 长度: ${len});
// 输出: 缩放后的点: [2, 4], 长度: 4.47213595499958
`
$3
可以在运行时动态切换底层数组类型:
`typescript
import { setArrayType, create } from 'pnt2';
// 将数组类型设置为 Float64Array
setArrayType(Float64Array);
// 创建一个新的二维点
const point = create();
console.log(point instanceof Float64Array); // true
`
$3
执行常见的向量操作,例如加法、减法和归一化:
`typescript
import { create, add, normalize } from 'pnt2';
const vecA = create();
vecA[0] = 3;
vecA[1] = 4;
const vecB = create();
vecB[0] = 1;
vecB[1] = 2;
// 向量相加
const result = create();
add(result, vecA, vecB);
console.log(加法结果: [${result[0]}, ${result[1]}]);
// 输出: 加法结果: [4, 6]
// 归一化向量
normalize(result, vecA);
console.log(归一化向量: [${result[0]}, ${result[1]}]);
// 输出: 归一化向量: [0.6, 0.8]
`
$3
计算两点之间的距离:
`typescript
import { fromValue, distance } from 'pnt2';
const pointA = fromValue(0, 0);
const pointB = fromValue(3, 4);
const dist = distance(pointA, pointB);
console.log(距离: ${dist});
// 输出: 距离: 5
`
$3
在角度和弧度之间进行转换:
`typescript
import { create, toRad, toDeg } from 'pnt2';
const angleInDegrees = create();
angleInDegrees[0] = 90;
angleInDegrees[1] = 180;
const angleInRadians = create();
toRad(angleInRadians, angleInDegrees);
console.log(弧度表示的角度: [${angleInRadians[0]}, ${angleInRadians[1]}]);
// 输出: 弧度表示的角度: [1.5707963267948966, 3.141592653589793]
toDeg(angleInDegrees, angleInRadians);
console.log(角度表示的角度: [${angleInDegrees[0]}, ${angleInDegrees[1]}]);
// 输出: 角度表示的角度: [90, 180]
`
API 参考
$3
- create(): ArrayType - 创建一个长度为 2 的新二维数组。
- clone(a: ArrayType): ArrayType - 克隆现有数组。
- fromValue(x: number, y: number): ArrayType - 从两个值创建一个新数组。
- copy(out: ArrayType, a: ArrayType): ArrayType - 将一个数组的值复制到另一个数组。
- set(out: ArrayType, x: number, y: number): ArrayType - 设置数组的值。
$3
- add(out: ArrayType, a: ArrayType, b: ArrayType): ArrayType - 按元素将两个数组相加。
- subtract(out: ArrayType, a: ArrayType, b: ArrayType): ArrayType - 按元素将两个数组相减。
- multiply(out: ArrayType, a: ArrayType, b: ArrayType): ArrayType - 按元素将两个数组相乘。
- divide(out: ArrayType, a: ArrayType, b: ArrayType): ArrayType - 按元素将两个数组相除。
- scale(out: ArrayType, a: ArrayType, b: number): ArrayType - 按标量缩放数组。
- equals(a: ArrayType, b: ArrayType): boolean - 检查两个数组是否相等。
$3
- distance(a: ArrayType, b: ArrayType): number - 计算两点之间的欧几里得距离。
- squaredDistance(a: ArrayType, b: ArrayType): number - 计算两点之间的平方距离。
- length(a: ArrayType): number - 计算向量的长度。
- squaredLength(a: ArrayType): number - 计算向量的平方长度。
- normalize(out: ArrayType, a: ArrayType): ArrayType - 将向量归一化为单位长度。
- dot(a: ArrayType, b: ArrayType): number - 计算两个向量的点积。
- cross(out: any, a: ArrayType, b: ArrayType): ArrayType - 计算两个二维向量的叉积。
$3
- setArrayType(type: any) - 动态设置底层数组类型。
- zero(out: ArrayType): ArrayType - 将数组的所有元素设置为零。
- toRad(out: ArrayType, a: ArrayType): ArrayType - 将角度从度数转换为弧度。
- toDeg(out: ArrayType, a: ArrayType): ArrayType - 将角度从弧度转换为度数。
$3
为了方便,提供以下别名:
- sub 对应 subtract
- mul 对应 multiply
- div 对应 divide
- len 对应 length
- dist 对应 distance
性能优化
- 缓存机制:通过缓存中间结果减少冗余计算。
- 运行时灵活性:根据性能需求,在 Float32Array、Float64Array` 和普通数组之间切换。