家具尺寸中的长宽高应该怎么理解?
长宽高在几何上的含义、轴对齐包围盒如何由 3×3 旋转矩阵求出,以及为什么投影宽度不等于参数表上那一个数字。
- 发布日期
- 更新日期
- 计算方法版本
- 2.0.0
- 内容维护
- 本页内容与本仓库中的计算引擎一同维护。几何或结论逻辑一旦变更,必须在同一次变更中同步更新已发布的方法说明及其自动检查。不存在单独署名的编辑团队,也没有外部审核方。
本文要回答的问题
长宽高在计算里到底指什么?旋转之后,为什么投影宽度会和参数表上任何一个数都不一样?
直接回答
长宽高是盒子沿物件自身轴的三条边;门洞看到的却是沿世界轴的轮廓。物件旋转后,引擎取旋转矩阵的绝对值求新的轴对齐包围盒;在它测试的六种轴对齐姿态里,投影宽度只是三条边中的一条——只是未必是标着「宽」的那条。这就是 1200 mm 宽的衣柜换个姿态后,可能用更窄的一面朝向门洞的原因。
详细解释
自身轴与世界轴
家具尺寸相对物件定义:长是前后,宽是左右,高是地面到顶。把整件家具转过去,这三个数一个都不会变——物理上的盒子还是那个盒子。
门洞则固定在世界里。它量的是物件穿过门洞平面那一刻,轮廓的水平与竖直跨度。这个跨度取决于朝向,因此和物件的三个尺寸不是同一类量。
投影宽度是怎么来的
第一版把每种姿态写成真实的 3×3 旋转矩阵 R = Rz · Ry · Rx,再用 |R| · h 求包围盒三边:h 是物件三条边组成的向量,|R| 表示对矩阵元素取绝对值。
旋转 90 度时矩阵里只有 0 和 1,于是 |R| · h 就是长宽高的一个排列。没有插值,也没有连续角度搜索;六种被测姿态,正是长方体需要考虑的六种轴对齐排列。
包围盒有意丢掉了什么
弧形扶手、斜靠背、沙发腿、把手、软坐垫,统统被一个按实测外廓定义的矩形实体近似。引擎把这一点作为 BOUNDING_BOX_ONLY 限制明确列出,而不是藏在一个看起来很笃定的结论背后。
好处是可复现:同样三个数永远给出同样的盒子、同样的比较表和同样的 3D 场景。代价是形状不方正的物件可能被描述得偏保守。量「实际要搬的那个状态」的外廓,能把误差留在安全一侧。
可操作的步骤
- 01
先按物件自身轴写下三条边
站在物件正前方:前后记长,左右记宽,地面到顶记高。先别想门洞,免得为了得到想要的结果而悄悄把数调换位置。
- 02
列出每种姿态下面朝门洞的两条边
直立时通常是宽和高,侧放时可能被换成高与宽。把这些成对组合列出来,就是第一版能测试的全部轮廓。
- 03
逐对与净开口比较
每种姿态下,用净宽减投影宽度、净高减投影高度。必须是同一姿态下两项都非负。
- 04
再对房间体积做一遍,并检查是否存在共同姿态
过了门却放不进房间的姿态不算完整解。引擎会记录联合姿态矩阵,并报告是否有单一姿态同时满足两项。
计算示例:高衣柜遇上 900 mm 门洞
衣柜长(进深)600 mm、宽 1200 mm、高 2000 mm;门洞净宽 900 mm、净高 2100 mm、门框深 200 mm;房间 3000 × 4000 × 2700 mm。选择直立姿态,不额外要求操作余量。以上均为输入值。下方表格是引擎实时结果,包含它推荐的姿态。
输入数据
| 物品 | 衣柜 |
|---|---|
| 长 | 600 mm |
| 宽 | 1200 mm |
| 高 | 2000 mm |
| 门洞净宽 | 900 mm |
| 门洞净高 | 2100 mm |
| 门框深度 | 200 mm |
| 房间宽 | 3000 mm |
| 房间长 | 4000 mm |
| 房间高 | 2700 mm |
| 额外余量 | 0 mm |
| 选定姿态 | 直立 |
计算过程
- 01直立姿态下,朝向门洞的轮廓用了 1200 mm 宽度,超过 900 mm 净宽。若只按参数表比一个数,答案到这里就结束了。
- 02换姿态会把三条边重新排列:600、1200、2000 中的某一条成为投影宽度,另一条成为投影高度。引擎把这六种排列分别用于门洞截面与房间体积检查。
- 03联合姿态矩阵随后判断是否有单一姿态同时满足两者。下方显示的状态与推荐姿态直接来自该矩阵;负的宽度余量属于当前选中的直立姿态,不属于推荐姿态。
引擎实跑结果
表中每一项数值都在页面渲染时由计算器所用的同一个引擎实时生成,文章只提供输入数据。
- 总体状态
- CONDITIONAL
几何上无法给出确定结论:局部检查需要换姿态、存在阻断性限制,或没有单一姿态能同时满足两项检查。
- 推荐姿态
- 侧放 · 旋转 90°
| 比较项 | 需要 | 可用 | 剩余 |
|---|---|---|---|
| 门洞净宽 | 1200 | 900 | -300 |
| 门洞净高 | 2000 | 2100 | 100 |
| 房间宽度 | 1200 | 3000 | 1800 |
| 房间长度 | 600 | 4000 | 3400 |
| 房间层高 | 2000 | 2700 | 700 |
- DOORWAY_REQUIRES_POSE_CHANGE
- ROOM_FIT_PASS
计算方法版本 2.0.0
适用范围
适用于矩形实体、六种轴对齐姿态、一段门洞截面与一个矩形房间体积。
本例的限制条件
- 不搜索连续角度。斜着搬既不测试,也不宣称不可能。
- 整个物件只有一个包围盒;装饰凸出与软包压缩未建模。
- 2000 mm 高度在 2100 mm 净高门洞里,某些姿态下头部余量很紧,这正是联合矩阵会暴露的取舍。
- 门扇、门框深度内旋转与搬运路径均未建模。
使用的公式
姿态旋转
R = Rz · Ry · Rx
六种被测姿态各自对应一个显式的 3×3 旋转矩阵,不是视觉上的障眼法。
包围盒三边
h盒 = |R| · h
对 R 逐元素取绝对值后乘以物件三边;轴对齐姿态下结果是长、宽、高的一个排列。
轮廓比较
W盒 = h盒,x H盒 = h盒,y
门洞截面在同一姿态下把这两个值与净宽、净高比较。
适用边界
- BOUNDING_BOX_ONLY:整个物件只用一个矩形盒子表示。
- AXIS_ALIGNED_POSES_ONLY:恰好六种姿态,不支持连续旋转。
- 门洞为 SECTION_ONLY、房间为 STATIC_VOLUME_ONLY,均不建模行进路径。
- 剩余量为 0 记为贴面,不算冲突。
- 输入缺失或非法时返回结构化失败,不生成看似合理的几何结论。
常见错误
把「宽」当成轮廓的固有属性
宽是物件自身轴上的属性。一旦旋转,门洞看到的可能正是原来的高或长。
默认总能斜一点
第一版只测试轴对齐姿态。真实搬运也许能靠倾斜成功,但工具不会替你下这个结论。
门洞和房间各用一种姿态
引擎要求同一种姿态同时满足两项。两种各自成功的姿态,加起来并不是一个解。
把包围盒当成家具的三维扫描
它是保守的矩形近似。把手、顶部线脚、软角都落在实测外廓之内,并不单独建模。
打开适配计算器
计算器把这几个概念摆到明面上:切换姿态,比较表会把同样三条边重新排列;结果面板则显示是否有单一姿态同时满足门洞与房间。3D 视图用的是同一份几何源,因此场景不会和数字打架。
填入你实测的家具、门洞与房间尺寸,即可看到同一套比较在真实情况下的结果。
打开计算器