# @amaplex-software/shapeit 中文文档

规范地址：https://npmcn.com/package/%40amaplex-software/shapeit/

版本：0\.1\.6
npm 元数据更新时间：2024-05-15T10:13:57.347Z
中文译文更新时间：2026-11-06T13:34:30.058Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40amaplex-software/shapeit
原文对照：https://npmcn.com/package/%40amaplex-software/shapeit/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：310 kB，20 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- peer 依赖：lodash ^4\.17\.4
- 首次发布：2024-03-28T13:51:01.890Z
- 最新版本发布：2024-05-15T10:13:57.161Z
- 近 30 天下载量：3116（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

用于节点JS或网页浏览器的形状检测和生成工具库

## 安装

```sh
npm install @amaplex-software/shapeit
```

也可以使用：`pnpm add @amaplex-software/shapeit`、`yarn add @amaplex-software/shapeit`、`bun add @amaplex-software/shapeit`

## README

# 形状

**形状** (塑造它)是一个用于Node.JS或网页浏览器的公用库,它将取出一组代表粗略所绘形状的顶点作为输入并会输出一个固定形状及其名称. 可能的形状估计取自以一组阈值常数为基础的形状图集. 形状图集和阈值常数都可以由用户明确提供,不过如果您正在寻找一个基本但体面的功能,则先前存在的值将被用作倒数.

![](https://user-images.githubusercontent.com/7648874/35002893-0db4a24a-fb26-11e7-8032-4a22a4246003.gif)

## 文档

形状(Shapeit)是一个接受一个大致被划出形状的单个参数的函数. 给定的形状是代表有X和Y值的2D顶点的数对阵. 简单的使用案例如下:

```js
import shapeit from 'shapeit'

const uglySquare = [
  [-0.1, 0   ],
  [4.9 , 0.2 ],
  [10.1, -0.1],
  [10.2, 4.9 ],
  [9.9 , 9.8 ],
  [5.1 , 9.9 ],
  [0.1 , 10  ],
  [-0.1, 4.7 ],
  [0.1 , -0.1],
]

const prettySquare = shapeit(uglySquare)

assert(prettySquare, [[Number, Number]])
assert(prettySquare.name, 'square')
```

结果也是一种外形,但顶点数量大为减少,最能与外形图中呈现出的一种外形相配合. 结果的形状还将增加一个 `name` 字段代表形状的名称。 唯一的例外是圆形结果, 在那里,我们有一个物体与 `center` 财务报告和审定财务报表 `radius` 字段 :

```js
import shapeit from 'shapeit'

const uglyCircle = [
  [1    , 0    ],
  [0.86 , 0.49 ],
  [0.5  , 0.86 ],
  [6.12 , 1    ],
  [-0.49, 0.86 ],
  [-0.86, 0.5  ],
  [-1   , 1.22 ],
  [-0.86, -0.49],
  [-0.5 , -0.86],
  [-1.83, -1   ],
  [0.49 , -0.86],
  [0.86 , -0.5 ],
]

const prettyCircle = shapeit(uglyCircle)

assert(prettyCircle.center, [Number, Number])
assert(prettyCircle.radius, Number)
assert(prettySquare.name, 'circle')
```

可以使用自定义配置创建新的形状实例 `new()` 方法 :

```js
import shapeit from 'shapeit'

const shapethat = shapeit.new({
  atlas: {},
  output: {},
  thresholds: {},
})
```

此外,可以使用 `modify()` 方法 :

```js
import shapeit from 'shapeit'

modify.new({
  atlas: {},
  output: {},
  thresholds: {},
})
```

更多关于上述示例中使用的配置选项的信息,详见文件部分。 此外,本文还列出每个配置字段的快速参考:

-   [形状图集](https://npmcn.com/package/%40amaplex-software/shapeit/#readme-shape-atlas)
-   [阈值常数](https://npmcn.com/package/%40amaplex-software/shapeit/#readme-threshold-contants)
-   [输出选项](https://npmcn.com/package/%40amaplex-software/shapeit/#readme-output-options)

### 形状图集

如初始摘要所指出,可提供形状图集和阈值常数。 让我们从形状图集开始。 形状图集是一个包含可能形状估计的图集,其几何可能以这样或那样的形式出现(翻译,旋转或镜像). 默认形状图集可能估计以下形状:

-   **四边形**
-   **等边六边形**
-   **等边五边形**
-   **等边三角形**
-   **金色- ratio 三角形**
-   **红外线**
-   **银角三角形**
-   **闪光**
-   **星号**
-   **夹子**

> 默认地图集可在 [此文件](https://npmcn.com/package/%40amaplex-software/shapeit/src/defaults/atlas)。 。 。 .

此外,无论我们提供的地图集如何,可能估计的基本形状很少:

-   **圆**
-   **六边形**
-   **八边形**
-   **打开多边形**
-   **五边形**
-   **多边形**
-   **矩形**
-   **平方圆**
-   **三角形**
-   **向量**
-   **向量**

#### 实例

默认情况下,指定的地图集形状将被视为一个封闭的多边形:

```js
import shapeit from 'shapeit'

const shapethat = shapeit.new({
  atlas: {
    parallelogram: [
      [1, 0],
      [5, 0],
      [4, 2],
      [0, 2],
      [1, 0],
    ]
  }
})

const uglyParallelogram = [
  [0.9 , 0.1 ],
  [3   , 0.2 ],
  [5.1 , -0.1],
  [4.6 , 0.9 ],
  [4.2 , 2.2 ],
  [2.1 , 2   ],
  [-0.1, 1.9 ],
  [0.4 , 1.1 ],
  [1.2 , -0.1],
]

const prettyParallelogram = shapethat(uglyParallelogram)

assert(prettyParallelogram, [[Number, Number]])
assert(prettyParallelogram.closed, true)
assert(prettyParallelogram.name, 'parallelogram')
```

如果我们想要指定一个开放的多边形,而不是为对象提供额外的 `closed` 布尔字段,顶点将在 `vertexes` 字段 :

```js
import shapeit from 'shapeit'

const shapethat = shapeit.new({
  atlas: {
    caret: {
      closed: false,
      vertices: [
        [-1, 0],
        [0 , 1],
        [1 , 0],
      ]
    }
  }
})

const uglyCaret = [
  [-1.1, 0.1  ],
  [-0.1, 0.89 ],
  [1.2 , -0.05],
]

const prettyCaret = shapethat(uglyCaret)

assert(prettyCaret, [[Number, Number]])
assert(prettyCaret.closed, false)
assert(prettyCaret.name, 'caret')
```

### 阈值常数

虽然很多次都是不必要的甚至危险的,但我们可以修改阈值常数. 每个阈值用于检测给定形状中的特定特征,这样我们就可以确定最终结果并相应固定. 以下是所有阈值列表,然后是对其作用的描述:

-   **圆减角** - 当试图将给定的形状与圆相匹配时,其值大于这个角的所有角会被减小. 较高的值会导致圆相匹配的概率更高. 0至 Q 之间的距离,默认为 0.6.
-   **圆闭相隔** - 只有当上个顶点与向量之一之间的距离比这个值更短时,一个给定的开口形状才可能被视为圆形,这意味着更高的值更可能导致一个圆形而不是开口的多边形. 0到 QQ 之间的距离,默认为 100 .
-   **常规偏差** - 只有当最后一个顶点与一个向量之间的距离比这个值短时,一个给定的开口形状可能自动被关闭并与地图集中的一个形状相匹配. 0到 QQ 和 90 之间的默认值.
-   **半径** - 用来通过检查其标准偏差与平均半径大小的比例来说明分布的均匀性如何是所有半径. 更低的值更可能使给定的形状与圆相匹配. 0到1之间的距离和默认为0.18.
-   **minpolygon地区** - 2个向量之间的相交点,只有在其面积大于这个值时,才被视为形成多边形的相交点,这意味着将困入一个小区域的相交点,不会被视为形成一个多边形,在我们计算时也不会被考虑. 0到 QQ 之间的距离, 默认为 300 .
-   **分数** - 与地图集中形状之一的匹配的最低分数被视为成功。 更高的值会导致更多的形状,这些形状有可能相匹配. 0到1之间的距离,默认值为0.83.
-   **分数** ——能给平方对决带来喜悦的最低分数,这意味着更低的分数更可能使给定的形状与平方相匹配. 0到1之间,默认值为0.85.
-   **向量还原角度** - 如果两个向量之间的角低于这个值,则2个向量将减少为一个向量,否则它们将被视为构成一角的2个向量。 更高的值会减少更多的角并导致直线. 范围在 0 至 Q 之间,默认为 0. 3.

> 默认阈值可以在 [此文件](https://npmcn.com/package/%40amaplex-software/shapeit/src/defaults/thresholds)。 。 。 .

#### 实例

```js
import shapeit from 'shapeit'

// Circles are more likely to be detected with these thresholds
const shapethat = shapeit.new({
  thresholds: {
    circleReductionAngle: 0.7,
    circleClosureDistance: 120,
  }
})
```

### 输出选项

输出形状可以通过指定其输出选项进行前置配置. 输出选项是可选的,可能包含以下字段:

-   **矩形旋转** - 如果输出形状是一个矩形,则其角将被四舍五入到该值的最近乘法上。 0至2π的距离和默认为 \* / 8.
-   **向量旋转** - 如果输出形状是矢量,则其角将四舍五入到该值的最近乘法。 0至2π和默认值为 π/ 16.

> 默认输出选项可在 [此文件](https://npmcn.com/package/%40amaplex-software/shapeit/src/defaults/output)。 。 。 .

#### 实例

```js
import shapeit from 'shapeit'

// Will result in vertical or horizontal rectangles and vectors only
const shapethat = shapeit.new({
  output: {
    rectRotationProduct: Math.PI / 2,
    vectorRotationProduct: Math.PI / 2,
  }
})
```

## 下载

该源可下载自 [GitHub 图像](http://github.com/Appfairy/shapeit)。也可以使用节点软件包管理器安装(`npm`:

```
npm install shapeit
```

## 常见问题

### @amaplex-software/shapeit 是什么？

用于节点JS或网页浏览器的形状检测和生成工具库

### 如何安装 @amaplex-software/shapeit？

在项目目录运行 npm install @amaplex-software/shapeit，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：lodash（^4\.17\.4）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @amaplex-software/shapeit 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/amaplex-software\_\_shapeit 是否存在。

### @amaplex-software/shapeit 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @amaplex-software/shapeit 可以商用吗？

@amaplex-software/shapeit 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @amaplex-software/shapeit 的下载量有多少？

根据 npm 官方下载统计，@amaplex-software/shapeit 在 2026/10/06 – 2026/11/04 这 30 天内被下载 3,116 次，日均约 104 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @amaplex-software/shapeit 还在维护吗？

最新版本 0\.1\.6 发布于 2024/05/15（2 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2024/03/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

