以下是引用ckstorm在2011-10-3 23:09:06的发言:
如果一定要求不规则的话,还真是难算。但是放到现实中,比方物流就方便点。现实中会把不规则图形变成矩形来方便装箱摆放。
1.求出图形中心点,然后以这个中心点求出一个能容纳不规则图形的矩形。
2.理想的最大装箱数量是总面积除以矩形面积,取整。
3.实际中,以最大满足容器一边为条件,枚举所有可能。(比方说容器为10*11的矩形,单个矩形为2*3。先最大满足10边长枚举,这个时候矩形摆放为:2+2+2+2+2,可以放18个;然后以最大满足另一边为条件,这时候为:2+2+2+2+3,可以放17个)。如果有多种可能则全部枚举(比方说边长12,可以是6个2,也可以是4个3)。
4.在第三步中,一旦满足理想最大数量就退出,理想最大数量就是所求;如果未能满足则取所有可能中的最大一个。
大家来拍砖 ~~
第一条边可以那么搞 后面的摆放就困难了
我想到一个思路 大家也一起拍拍砖:
用剩余空间来遍历 没放一个矩形区域 就先计算下横向剩余空间 然后在这个空间内放置一个物体
假设物体排放只有两个形态 一个是横向 一个是纵向
假设空间是垂直倾斜的 左下角为支点 向左倾斜 并不急平衡问题 例如会不会因为重力问题会导致不平衡物体会倾斜
那么 如楼上说的 第一步应该是先计算剩余空间 计算方法是先求矩形物体最长边 那么剩余区域就是空间起始边和物体最长边形成的矩形区域
把第一个物体以一种形态放置在这个矩形区域内 然后向下遍历
再求剩余空间 这次求出来的可能就不是矩形区域了 可能是不规则的区域 求剩余空间是以当前边缘(底边)和其的最高点加上物体最长边来求形成的区域
再往这个区域内放置物体 物体的放置以先以底边方向搜索最低点放置物体 以一种形态放置在上面 然后再向下遍历
也就是每种形态都有一次遍历 遍历的过程可以以递归(或树遍历)的方式 当然写程序不一定需要递归
思路是这样 晚些那图举例