3d-bin-packing-ts

中文文档
1.0.1发布于 2025/09/17MITTypeScriptESM + CJS近 30 天下载 1795

3D 容器包装 EB AFIT 算法的 TypeScript 执行

中文使用文档
文档目录9 节
  1. 特征
  2. 使用量
  3. 安装
  4. 基本用途
  5. 包装多容器
  6. 递增包装
  7. API 参考
  8. 类
  9. 接口和类型

类型脚本中的 三维容器包装

npm version

这是 TypeScript 端口 3DC 集装箱包 C#图书馆,由Davidmchapman编写。 。 。 .

它包含一个EB-AFIT算法的实现,一种以解决三维托盘包装问题为目的的heuristic方法,也称为3D bin包装. 它是由美国空军技术学院(AFIT)的埃尔汉·巴尔塔克奥克卢(EB)于2001年作为其硕士论文的一部分所开发,后来在2006年与詹姆斯·T·摩尔和小雷蒙德·R·希尔(英语:Raymond R. Hill Jr.)合著的论文中被描述. 如果您想更多地了解该算法及其历史, 请访问参考执行仓库: https://github.com/wknechtel/3d-bin-pack (中文(简体) )。 。 。 .

这个TypeScript端口包括了所有原始功能外加一个新的包 Incremental功能,它自动将物品分出在多个相同尺寸的容器上.

特征

  • 将物品装入容器,实现最佳空间利用.
  • * 递增包装,在大小相同的多个集装箱间分发物品.
  • 有完整类型定义的 TypeScript 支持 .

看看这个 实例 可操作代码样本的文件夹.

使用量

安装

npm install 3d-bin-packing-ts

基本用途

import { Container, Item, PackingService, PackingAlgorithmType } from '3d-bin-packing-ts';

// Create a container
const container = new Container('container1', 100, 100, 100);

// Create items to pack
const items = [
  new Item('item1', 30, 40, 50, 1),
  new Item('item2', 20, 30, 40, 2),
  new Item('item3', 10, 20, 30, 3)
];

// Pack items into the container
const result = PackingService.packSingle(container, items);

// Check if all items were packed
console.log(`All items packed: ${result.algorithmPackingResults[0].isCompletePacked}`);

// Get packed items with their positions
const packedItems = result.algorithmPackingResults[0].packedItems;
console.log('Packed items:', packedItems);

// Get unpacked items
const unpackedItems = result.algorithmPackingResults[0].unpackedItems;
console.log('Unpacked items:', unpackedItems);

包装多容器

import { Container, Item, PackingService } from '3d-bin-packing-ts';

// Create multiple containers
const containers = [
  new Container('container1', 100, 100, 100),
  new Container('container2', 150, 150, 150)
];

// Create items to pack
const items = [
  new Item('item1', 30, 40, 50, 1),
  new Item('item2', 20, 30, 40, 2),
  new Item('item3', 10, 20, 30, 3)
];

// Pack items into containers
const results = PackingService.pack(containers, items);

// Process results for each container
results.forEach(result => {
  console.log(`Container ${result.containerId}:`);
  console.log(`- Packed items: ${result.algorithmPackingResults[0].packedItems.length}`);
  console.log(`- Unpacked items: ${result.algorithmPackingResults[0].unpackedItems.length}`);
  console.log(`- Volume utilization: ${result.algorithmPackingResults[0].percentContainerVolumePacked}%`);
});

递增包装

import { Item, PackingService } from '3d-bin-packing-ts';

// Create items to pack
const items = [
  new Item('item1', 30, 40, 50, 1),
  new Item('item2', 20, 30, 40, 2),
  new Item('item3', 10, 20, 30, 3)
];

// Define container dimensions
const containerDimensions = { length: 100, width: 100, height: 100 };

// Pack items incrementally (creates as many containers as needed)
const result = PackingService.packIncremental(items, containerDimensions);

// Get information about containers and item distribution
console.log(`Number of containers needed: ${result.containers.length}`);

// Get aggregated results (which items went into which container)
result.aggregatedResults.forEach(aggResult => {
  console.log(`Container ${aggResult.containerId}:`);
  aggResult.itemQuantities.forEach(itemQty => {
    console.log(`- Item ${itemQty.itemId}: ${itemQty.quantity} units`);
  });
});

API 参考

类

Container

代表装入物品的三维容器.

new Container(id: string, length: number, width: number, height: number)

Item

代表要打包的三维项目.

new Item(id: string, dim1: number, dim2: number, dim3: number, quantity: number)

PackingService

包装业务的静态服务.

方法:

  • packSingle(container, items, algorithmTypeIDs?): 将物品装入单个容器
  • pack(containers, items, algorithmTypeIDs?): 将物品装入多个容器
  • packIncremental(items, containerDimensions, maxVolumePercentage?, idGenerator?): 视需要将物品装入尽可能多的容器

接口和类型

AlgorithmPackingResult

包含包装作业的结果.

属性 :

  • packedItems: 组装物品及其位置
  • unpackedItems: 无法打包的物品组
  • isCompletePacked:布尔表示所有项目是否被包装
  • packTimeMilliseconds: 包装所需时间
  • percentContainerVolumePacked使用集装箱量的百分比
  • percentItemVolumePacked: 包装物品总量的百分比

版本与发布记录

3d-bin-packing-ts 共发布 2 个版本,首次发布于 2025/09/17;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.1latest2025/09/171.1 年前
1.0.02025/09/171.1 年前

关于 3d-bin-packing-ts 的常见问题

3d-bin-packing-ts 是什么?

3D 容器包装 EB AFIT 算法的 TypeScript 执行

如何安装 3d-bin-packing-ts?

在项目目录运行 npm install 3d-bin-packing-ts,或使用 pnpm add / yarn add / bun add。

3d-bin-packing-ts 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

3d-bin-packing-ts 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

3d-bin-packing-ts 可以商用吗?

3d-bin-packing-ts 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

3d-bin-packing-ts 的下载量有多少?

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

3d-bin-packing-ts 还在维护吗?

最新版本 1.0.1 发布于 2025/09/17(1.1 年前);至今共发布 2 个版本,其中过去 12 个月发布了 0 个;首次发布于 2025/09/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。