大家好,本篇文章主要讲的是Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)代码实现空间切割,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
目录
问题代码效果演示测试数据结果总结
问题
给定一个大的立方体和一批小的立方体,对于每个立方体,都知道如图的信息(知道x,y,z坐标和长、宽、高),且任意小立方体都被包含在大立方体内、各立方体之间不重叠。问如何将小立方体从大立方体中切去,留下其他空间?
代码
包com。大坝。算法。算法包。freespacetubepackingalgorithm。util
导入com。大坝。算法。常见。实体。自由空间;
导入com。大坝。算法。常见。实体。溢出空间。点;
导入com。大坝。算法。常见。util。deepcloneutil
导入Java。util。ArrayList
导入Java。util。列表;
/**
* 给定一批已用的剩余空间和一个大空间,返回最终的剩余空间
*/
公共类GetUsedSpaceUtil {
私有双偏移=0.01;
公共静态void main(String[] args)引发异常{
可用空间bigFreeSpace=新自由空间(0,0,0,100,100,100);
list freespace freeSpaceList=new ArrayList();
list可用空间usedSpaceList=new ArrayList();
usedSpaceList.add(新可用空间(0,50,50,30,30,30));
usedSpaceList.add(新可用空间(0,90,90,10,5,5));
新的GetUsedSpaceUtil().getFreeSpaceUtil(bigFreeSpace,freeSpaceList,used space list);
系统。出去。println(自由空间列表);
}
public void getFreeSpaceUtil(FreeSpace big FreeSpace,ListFreeSpace freeSpaceList,ListFreeSpace usedSpaceList)引发异常{
//检验数据是否正确
布尔标志=this。检查数据(大空闲空间,已用空间列表);
if (flag==false) {
抛出新异常('输入数据有误');
}
//处理第一个已用空间
空闲空间优先使用空间=使用空间列表。删除(0);
//获得一批剩余空间,用这些剩余空间来处理后面的使用空间列表
列出自由空间。消除空间(大的自由空间,首先使用的空间);
//处理剩下的空间
while (usedSpaceList.size() 0) {
空闲空间优先使用空间1=使用空间列表。删除(0);
list free space removeFreeSpaceList=new ArrayList();
list可用空间addFreeSpaceList=new ArrayList();
系统。出去。println(' free spaces:' free spaces ');
for(FreeSpace FreeSpace:freeSpaces){
//判断有没有交集
System.out.println('判断有无交集:');
System.out.println('空间1 '可用空间。tostring());
System.out.println('空间' 2 '首先使用空间1。tostring());
int state=this。判断空间关系(空闲空间,首先使用的空间1);
System.out.println('有无交集州:'州);
if (state==0) {
继续;
} else if (state==1) {
//有交集就要移除
removeFreeSpaceList.add(自由空间);
list free space[]space数组=this。拆分空间(先用空间1,空闲空间);
//已用空间的分解空间
list可用空间list=space array[0];
//剩余空间的分解空间
list free space freeList=space array[1];
addfreespacelist。addall(freeList);
//将已用空间的分解空间添加到分解空间列表
使用空间列表。addall(used list);
} else if (state==2) {
removeFreeSpaceList.add(自由空间);
//剩余空间全包含已用空间
列表自由空间自由空间列表1=this。消除空间(空闲空间,首先使用的空间1);
自由空间。addall(空闲空间列表1);
//因为剩余空间包含已用空间,可以直接破裂
打破;
} else if (state==3) {
removeFreeSpaceList.add(自由空间);
//已用空间全包含剩余空间
列表自由空间自由空间列表1=this。消除空间(先用空间1,空闲空间);
使用空间列表。addall(freespacelist 1);
}
System.out.println('来到这里');
}
//将分割得到的剩余空间添加回来,以便给下一个已用空间使用
自由空间。addall(addFreeSpaceList);
//减去已经使用的剩余空间
自由空间。remove all(removeFreeSpaceList);
}
//存储最终的剩余空间
自由空间列表。addall((列出可用空间)deepcloneutil。deep clone(free spaces));
System.out.println('最终剩余空间');
System.out.println('剩余空间数量自由空间列表。size());
系统。出去。println(自由空间列表);
}
/**
* 检验数据是否正确
* 1、所有已用空间不能互相重合
* 2、所有已用空间都在最大空间内
*
* @param bigFreeSpace
* @param usedSpaceList
* @返回错误:数据不合理
*/
私有布尔检查数据(自由空间大自由空间,列表自由空间usedSpaceList) {
for(int I=0;我用了空间列表。size();i ) {
//判断是否所有已用空间都被包含在大自由空间中
如果(这个。判断空间关系(大自由空间,usedSpaceList.get(i))!=2) {
System.out.println('不是所有已用空间都被包含在大自由空间中');
返回错误的
}
//判断已用空间之间是否相互重合
for(int j=0;j已用空间列表。size();j ) {
System.out.println('相交类型:'这个。判断空间关系(使用的空间列表。get(I),已用空间列表。get(j)));
如果(我!=j(这个。判断空间关系(使用的空间列表。get(I),usedSpaceList.get(j))!=0)) {
系统。出去。println('使用空格之间相互重合');
返回错误的
}
}
}
返回真实的
}
/**
* 剔除空间
* 给定一个大空间和一个小空间,将小空间从大空间中剔除,最多返回六个剩余空间
*
* @param bigSpace
* @param smallSpace
*/
公共列表自由空间消除空间(自由空间大空间,自由空间小空间){
list freespace freeSpaceList=new ArrayList();
//获取第一个空间
如果(数学。ABS(大空间。getx()-小空间。getx())=offSet){
//这个空间已经很小了,抛弃
}否则{
自由空间列表。添加(新的自由空间(大空间。getx(),
bigSpace.getY(),
bigSpace.getZ(),
空间小。getx()-大空间。getx(),
bigSpace.getWidth(),
大空间。getheight()));
}
//获取第二个空间
如果(数学。ABS(大空间。getx()大空间。getlength()-小空间。getx()-小空间。getlength())=offSet){
//这个空间已经很小了,抛弃
}否则{
自由空间列表。添加(新的自由空间(小空间。getx()小空间。getlength(),
bigSpace.getY(),
bigSpace.getZ(),
大空间。getx()大空间。getlength()-小空间。getx()-小空间。getlength(),
bigSpace.getWidth(),
大空间。getheight()));
}
//获取第三个空间
如果(数学。ABS(大空间。getz()大空间。getheight()-小空间。getz()-小空间。getheight())=offSet){
//这个空间已经很小了,抛弃
}否则{
自由空间列表。添加(新的可用空间(小空间。getx(),
bigSpace.getY(),
空间小。getz()小空间。getheight(),
smallSpace.getLength(),
bigSpace.getWidth(),
大空间。getz()bigspace。getheight()-小空间。getz()-小空间。getheight());
}
//获取第四个空间
如果(数学。ABS(大空间。getz()-小空间。getz())=offset)>
//这个空间已经很小了,抛弃
}否则
freeSpaceList.add(新建自由空间。getx()),
bigSpace.getY(),
bigSpace.getZ(),
smallSpace.getLength(),
bigSpace.getWidth(),
空间小。getz()-大空间。getz());
}
//获取第五个空间
如果(数学。ABS(bigspace。gety()bigspace。get width()-小空间。gety()-小空间。get width())=offset)>
//这个空间已经很小了,抛弃
}否则
freeSpaceList.add(新建自由空间。getx()),
空间小。gety()小空间。getwidth(),
smallSpace.getZ(),
smallSpace.getLength(),
大空间。gety()bigspace。getwidth()-小空间。gety()-小空间。获取宽度()函数,
空间小。get height());
}
//获取第六个空间
如果(数学。ABS(空间小。gety()-大空间。gety())=offset)>
//这个空间已经很小了,抛弃
}否则
freeSpaceList.add(新建自由空间。getx()),
bigSpace.getY(),
smallSpace.getZ(),
smallSpace.getLength(),
空间小。gety()-大空间。gety(),
空间小。get height());
}
返回自由空间列表列表;
}
/**
*判断两个空间是否有交集,有返回一个,没有返回0个,
*若可用空间1全包含自由空间2,返回2个,
*若自由泳2全包含自由空间1,返回3
*
* @param freeSpace1
* @param freeSpace2
* @返回
*/
公共int判断空间关系(自由空间1,自由空间2)>
//判断可用空间1是否全包含自由泳2
if(自由空间1。getx()=可用空间2。getx()偏移
自由空间1。gety()=freespace 2。gety()偏移
自由空间1。getz()=可用空间2。getz()偏移
自由空间1。getx()可用空间1。获取长度()偏移=可用空间2。getx()自由空间2。获取长度()
自由空间1。gety()可用空间1。get width()offset=可用空间2。gety()可用空间2。获取宽度()
自由空间1。getz()自由空间1。getheight()offset=可用空间2。getz()自由空间2。getheight()
)>
返回2;
}
//判断自由泳2是否全包含可用空间1
如果(freespace 2。getx()=可用空间1。getx()-偏移)
自由空间2。gety()=自由空间1。gety()-偏移
自由空间2。getz()=自由空间1。getz()-偏移
自由空间2。getx()自由空间2。获取长度()-偏移=可用空间1。getx()可用空间1。获取长度()
自由空间2。gety()可用空间2。获取宽度()-偏移=可用空间1。gety()可用空间1。获取宽度()
自由空间2。getz()自由空间2。getheight()-偏移=自由空间1。getz()自由空间1。getheight()
)>
返回3;
}
//获取两个空间的中心坐标
double x1=可用空间1。getx()(可用空间1。get length()* 1.0)/2;
double y1=可用空间1。gety()(freespace 1。getwidth()* 1.0)/2;
double Z1=可用空间1。getz()(自由空间1。getheight()* 1.0)/2;
double x2=可用空间2。getx()(freespace 2。get length()* 1.0)/2;
double y2=可用空间2。gety()(freespace 2。getwidth()* 1.0)/2;
double z2=可用空间2。getz()(自由空间2。getheight()* 1.0)/2;
//判断是否相交
如果(数学。ABS(x1-x2)=(可用空间1。getlength()freespace 2。getlength())* 1.0/2-offSet
数学。ABS(y1-y2)=(可用空间1。getwidth()freespace 2。getwidth())* 1.0/2-偏移量
数学。ABS(Z1-z2)=(自由空间1。getheight()freespace 2。getheight())* 1.0/2-offSet){
返回1;
}
返回0;
}
/**
* 给定一个剩余空间,返回剩余空间的八个角坐标
*
* @param空间
* @返回
*/
公共列表点getPointListWithSpace(可用空间空间){
list point point list=new ArrayList();
//点一
点列表。添加(新的点(空格。getx()、space.getY()、space.getZ()、1));
//点2
点列表。添加(新的点(空格。getx()空间。getlength()、space.getY()、space.getZ()、2));
//点3
点列表。添加(新的点(空格。getx()空间。getlength()、space.getY() space.getWidth()、space.getZ()、3));
//点四
点列表。添加(新的点(空格。getx()、space.getY() space.getWidth()、space.getZ()、4));
//点5
点列表。添加(新的点(空格。getx()、space.getY()、space.getZ() space.getHeight()、5));
//点6
点列表。添加(新的点(空格。getx()空间。getlength()、space.getY()、space.getZ() space.getHeight()、6));
//点七
点列表。添加(新的点(空格。getx()空间。getlength()、space.getY() space.getWidth()、space.getZ() space.getHeight()、7));
//点8
点列表。添加(新的点(空格。getx(),space.getY() space.getWidth(),space.getZ() space.getHeight(),8));
返回点列表
}
/**
* 给定一个点和一个空间,判断点是否被包含在空间中
*
* @param空间
* @参数点
* @返回
*/
public boolean isContainedInSpace(自由空间空间,点点){
如果(空格。getx()-offSet=点。getx()点。getx()-offSet=空格。getx()空间。getlength()
空间。gety()-offSet=点。gety()点。gety()-offSet=空格。gety()空间。getwidth()
空间。getz()-offSet=点。getz()点。getz()-offSet=空格。getz()空间。getheight()
) {
返回真实的
}
返回错误的
}
/**
* 集合1:自由空间一包含自由空间2的角集合
*
* @param freeSpace1
* @param freeSpace2
* @返回
*/
公共列表点数calculatePointNum(自由空间自由空间1,自由空间自由空间2) {
list point point list=new ArrayList();
list point eight point list=getPointListWithSpace(freespace 2);
//System.out.println('八个点集合:');
//系统。出去。println(八点列表。tostring());
//System.out.println('空间:'可用空间1。tostring());
for(Point Point:eightPointList){
如果(这个。iscontainedinspace(freespace 1,point)==true) {
pointList.add(点);
}
}
//System.out.println('找到的点数量点列表。size());
返回点列表
}
/**
* 给定两个空间,获取两个空间的共有空间
*
* @param freeSpace1
* @param freeSpace2
* @返回
*/
公共自由空间getSameSpace(自由空间自由空间1,自由空间自由空间2) {
//freeSpace1包含自由空间2的角个数
列表点列表1=这个。calculatepointnum(自由空间1,自由空间2);
int size 1=点列表1。size();
//自由空间2包含可用空间一的角个数
列表点列表2=这个。calculatepointnum(自由空间2,自由空间1);
int size 2=point list 2。size();
系统。出去。println('大小1 '大小1 ' ' '大小2 '大小2);
//freeSpace1大于自由空间2(不是体积意义上的大于)
if (size1=size2) {
//只有一个角被包含
if (size1==1) {
返回这个。getsamespacewithonepoint(自由空间1,点列表1。get(0));
} else if (size1==2) {
返回此。getsamespacewithtwo point(free space 1,pointList1.get(0),pointList1。get(1));
} else if(size 1==4)}
返回此。getsamespacewithfourtpoint(freespace 1,pointList1.get(0),pointList1.get(1),pointList1.get(2),pointList1。get(3));
}
}否则
//只有一个角被包含
if(size 2==1)}
返回此。getsamespacewithonepoint(自由空间2,点列表2。get(0));
} else if(size 2==2)}
返回此。getsamespacewithtwo point(free space 2,pointList2.get(0),pointList2。get(1));
} else if(size 2==4)}
System.out.println('寻找共同空间');
返回此。getsamespacewithfourtpoint(自由空间2,点列表2.get(0),点列表2.get(1),点列表2.get(2),点列表2。get(3));
}
}
返回空:
}
/**
*一个空间只有一个点被另一个空间包含时,找共同空间
*
* @返回
*/
公共自由空间getsamespacewithonepoint
listpoint pointlistwithbigspace=this。getpointlistwithspace(大空间);
//1七
如果(点。getindex()==1){ }
返回新FreeSpace(point.getX()),
point.getY(),
point.getZ(),
pointListWithBigSpace.get(6).getX() -点。getX(),
pointListWithBigSpace.get(6).getY() -点。getY(),
pointListWithBigSpace.get(6).getZ() -点。getz();
}
//2八
如果(点。getindex()==2)}
返回新可用空间(pointlistwithbigspace。get(7)).getX(),
point.getY(),
point.getZ(),
点。getx()-pointlistwithbigspace。得到(7)分.getX(),
pointListWithBigSpace.get(7).getY() -点。getY(),
pointListWithBigSpace.get(7).getZ() -点。getz();
}
//3五
如果(点。getindex()==3)}
返回新可用空间(pointlistwithbigspace。得到(4)分.getX(),
pointListWithBigSpace.get(4).getY(),
point.getZ(),
点。getx()-pointlistwithbigspace。得到(4)分.getX(),
点。gety()-pointlistwithbigspace。得到(4)分.getY(),
pointListWithBigSpace.get(4).getZ() -点。getz();
}
//4六
如果(点。getindex()==4)}
返回新FreeSpace(point.getX()),
pointListWithBigSpace.get(5).getY(),
point.getZ(),
pointListWithBigSpace.get(5).getX() -点。getX(),
点。gety()-pointlistwithbigspace。得到(5)分.getY(),
pointListWithBigSpace.get(5).getZ() -点。getz();
}
//5三
如果(点。getindex()==5)}
返回新FreeSpace(point.getX()),
point.getY(),
pointListWithBigSpace.get(2).getZ(),
pointListWithBigSpace.get(2).getX() -点。getX(),
pointListWithBigSpace.get(2).getY() -点。getY(),
点。getz()-pointlistwithbigspace。得到(2)分.getz();
}
//6四
如果(点。getindex()==6){ }
返回新可用空间(pointlistwithbigspace。get(3)).getX(),
point.getY(),
point.getZ(),
点。getx()-pointlistwithbigspace。得到(3)分.getX(),
pointListWithBigSpace.get(3).getY() -点。getY(),
点。getz()-pointlistwithbigspace。得到(3)分.getz();
}
//7一
如果(点。getindex()==7)}
返回新可用空间(pointlistwithbigspace。get(0)).getX(),
pointListWithBigSpace.get(0).getY(),
pointListWithBigSpace.get(0).getZ(),
点。getx()-pointlistwithbigspace。获取(0).getX(),
点。gety()-pointlistwithbigspace。获取(0).getY(),
点。getz()-pointlistwithbigspace。获取(0).getz();
}
//8二
如果(点。getindex()==8){ }
返回新可用空间(pointlistwithbigspace。get(1)).getX(),
pointListWithBigSpace.get(1).getY(),
point.getZ(),
点。getx()-pointlistwithbigspace。得到(1).getX(),
点。gety()-pointlistwithbigspace。得到(1).getY(),
pointListWithBigSpace.get(1).getZ() -点。getz();
}
返回空:
}
/**
*一个空间有两个点被另一个空间包含时,找共同空间
*
* @返回
*/
公共自由空间getsamespace with two point(free space big space,point1,point2)>
listpoint pointlistwithbigspace=this。getpointlistwithspace(大空间);
//1
如果(第1点。getindex()==1点2。getindex()==2)}
返回新自由空间(项目1.getX()),
点1.getY(),
点1.getZ(),
点2.getX() -点1.getX(),
pointListWithBigSpace.get(7).getY() -点1.getY(),
pointListWithBigSpace.get(7).getZ() -点1 .getz();
}
//3!四
if (point1.getIndex() == 3 && point2.getIndex() == 4) { return new FreeSpace(point2.getX(), pointListWithBigSpace.get(4).getY(), point2.getZ(), point1.getX() - point2.getX(), point2.getY() - pointListWithBigSpace.get(4).getY(), pointListWithBigSpace.get(4).getZ() - point2.getZ()); } //5、6 if (point1.getIndex() == 5 && point2.getIndex() == 6) { return new FreeSpace(point1.getX(), point1.getY(), pointListWithBigSpace.get(3).getZ(), point2.getX() - point1.getX(), pointListWithBigSpace.get(3).getY() - point1.getY(), point1.getZ() - pointListWithBigSpace.get(3).getZ()); } //7、8 if (point1.getIndex() == 7 && point2.getIndex() == 8) { return new FreeSpace(point2.getX(), pointListWithBigSpace.get(0).getY(), pointListWithBigSpace.get(0).getZ(), point1.getX() - point2.getX(), point2.getY() - pointListWithBigSpace.get(0).getY(), point2.getZ() - pointListWithBigSpace.get(0).getZ()); } //1、4 if (point1.getIndex() == 1 && point2.getIndex() == 4) { return new FreeSpace(point1.getX(), point1.getY(), point1.getZ(), pointListWithBigSpace.get(5).getX() - point1.getX(), point2.getY() - point1.getY(), pointListWithBigSpace.get(5).getZ() - point1.getZ()); } //5、8 if (point1.getIndex() == 5 && point2.getIndex() == 8) { return new FreeSpace(point1.getX(), point1.getY(), pointListWithBigSpace.get(1).getZ(), pointListWithBigSpace.get(1).getX() - point1.getX(), point2.getY() - point1.getY(), point1.getZ() - pointListWithBigSpace.get(1).getZ()); } //2、3 if (point1.getIndex() == 2 && point2.getIndex() == 3) { return new FreeSpace(pointListWithBigSpace.get(1).getX(), point1.getY(), point1.getZ(), point1.getX() - pointListWithBigSpace.get(4).getX(), point2.getY() - point1.getY(), pointListWithBigSpace.get(4).getZ() - point1.getZ()); } //6、7 if (point1.getIndex() == 6 && point2.getIndex() == 7) { return new FreeSpace(point1.getX(), pointListWithBigSpace.get(0).getY(), pointListWithBigSpace.get(0).getZ(), point2.getX() - point1.getX(), point2.getY() - pointListWithBigSpace.get(0).getY(), point1.getZ() - pointListWithBigSpace.get(0).getZ()); } //1、5 if (point1.getIndex() == 1 && point2.getIndex() == 5) { return new FreeSpace(point1.getX(), point1.getY(), point1.getZ(), pointListWithBigSpace.get(2).getX() - point1.getX(), pointListWithBigSpace.get(2).getY() - point1.getY(), point2.getZ() - point1.getZ()); } //2、6 if (point1.getIndex() == 2 && point2.getIndex() == 6) { return new FreeSpace(pointListWithBigSpace.get(3).getX(), point1.getY(), point1.getZ(), point1.getX() - pointListWithBigSpace.get(3).getX(), pointListWithBigSpace.get(3).getY() - point1.getY(), point2.getZ() - point1.getZ()); } //4、8 if (point1.getIndex() == 4 && point2.getIndex() == 8) { return new FreeSpace(point1.getX(), pointListWithBigSpace.get(1).getY(), point1.getZ(), pointListWithBigSpace.get(1).getX() - point1.getX(), point1.getY() - pointListWithBigSpace.get(1).getY(), point2.getZ() - point1.getZ()); } //3、7 if (point1.getIndex() == 3 && point2.getIndex() == 7) { return new FreeSpace(pointListWithBigSpace.get(0).getX(), pointListWithBigSpace.get(0).getY(), point1.getZ(), point1.getX() - pointListWithBigSpace.get(0).getX(), point2.getY() - pointListWithBigSpace.get(0).getY(), point2.getZ() - point1.getZ()); } return null; } /** * 一个空间有四个点被另一个空间包含时,找共同空间 * * @return */ public FreeSpace getSameSpaceWithFourPoint(FreeSpace bigSpace, Point point1, Point point2, Point point3, Point point4) { List<Point> pointListWithBigSpace = this.getPointListWithSpace(bigSpace); //1、2、3、4 if (point1.getIndex() == 1 && point2.getIndex() == 2 && point3.getIndex() == 3 && point4.getIndex() == 4) { return new FreeSpace(point1.getX(), point1.getY(), point1.getZ(), point2.getX() - point1.getX(), point4.getY() - point1.getY(), pointListWithBigSpace.get(4).getZ() - point1.getZ()); } //5、6、7、8 if (point1.getIndex() == 5 && point2.getIndex() == 6 && point3.getIndex() == 7 && point4.getIndex() == 8) { return new FreeSpace(point1.getX(), point1.getY(), pointListWithBigSpace.get(3).getZ(), point2.getX() - point1.getX(), point4.getY() - point1.getY(), point1.getZ() - pointListWithBigSpace.get(3).getZ()); } //1、4、5、8 if (point1.getIndex() == 1 && point2.getIndex() == 4 && point3.getIndex() == 5 && point4.getIndex() == 8) { return new FreeSpace(point1.getX(), point1.getY(), point1.getZ(), pointListWithBigSpace.get(1).getX() - point1.getX(), point2.getY() - point1.getY(), point3.getZ() - point1.getZ()); } //2、3、6、7 if (point1.getIndex() == 2 && point2.getIndex() == 3 && point3.getIndex() == 6 && point4.getIndex() == 7) { return new FreeSpace(pointListWithBigSpace.get(0).getX(), point1.getY(), point1.getZ(), point1.getX() - pointListWithBigSpace.get(0).getX(), point2.getY() - point1.getY(), point3.getZ() - point1.getZ()); } //3、4、7、8 if (point1.getIndex() == 3 && point2.getIndex() == 4 && point3.getIndex() == 7 && point4.getIndex() == 8) { return new FreeSpace(point2.getX(), pointListWithBigSpace.get(0).getY(), point2.getZ(), point1.getX() - point2.getX(), point2.getY() - pointListWithBigSpace.get(0).getY(), point4.getZ() - point2.getZ()); } //1、2、5、6 if (point1.getIndex() == 1 && point2.getIndex() == 2 && point3.getIndex() == 5 && point4.getIndex() == 6) { return new FreeSpace(point1.getX(), point1.getY(), point1.getZ(), point2.getX() - point1.getX(), pointListWithBigSpace.get(3).getY() - point1.getY(), point3.getZ() - point1.getZ()); } return null; } /** * freeSpace1:已用空间 * freeSpace2:剩余空间 * * @return 数组 * * 数组元素1:已用空间的分解 * * 数组元素2:返回剩余空间 */ public List<FreeSpace>[] splitSpace(FreeSpace freeSpace1, FreeSpace freeSpace2) { List<FreeSpace>[] listArry = new List[2]; System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); System.out.println("freeSpace1" + freeSpace1 + ">>" + "freeSpace2" + freeSpace2); FreeSpace sameSpace = this.getSameSpace(freeSpace1, freeSpace2); System.out.println("sameSpace" + sameSpace); System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"); listArry[0] = this.eliminateSpace(freeSpace1, sameSpace); listArry[1] = this.eliminateSpace(freeSpace2, sameSpace); return listArry; } }效果演示
测试数据
package com.dam.controller; import com.dam.algorithm.algorithmPackage.freeSpaceTubePackingAlgorithm.util.GetUsedSpaceUtil; import com.dam.algorithm.common.entity.FreeSpace; import com.dam.common.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/splitSpace") @Api(tags = "获取装载方案") public class SplitSpaceController { @GetMapping("/usedSpace") @ApiOperation("获取装载方案集合") private Result usedSpace() throws Exception { //添加已用空间 List<FreeSpace> usedSpaceList = new ArrayList<>(); //需要修改大空间 usedSpaceList.add(new FreeSpace(0, 0, 0, 100, 100, 100)); this.addUsedSpace(usedSpaceList); return Result.ok().data("usedSpaceList", usedSpaceList); } @GetMapping("/splitSpace") @ApiOperation("获取装载方案集合") private Result splitSpace() throws Exception { System.out.println("开始计算"); long start = System.currentTimeMillis(); FreeSpace bigFreeSpace = new FreeSpace(0, 0, 0, 100, 100, 100); List<FreeSpace> freeSpaceList = new ArrayList<>(); freeSpaceList.add(bigFreeSpace); //添加已用空间 List<FreeSpace> usedSpaceList = new ArrayList<>(); this.addUsedSpace(usedSpaceList); //计算 new GetUsedSpaceUtil().getFreeSpaceUtil(bigFreeSpace, freeSpaceList, usedSpaceList); long end = System.currentTimeMillis(); System.out.println("计算时间:" + (end - start) + "ms"); return Result.ok().data("freeSpaceList", freeSpaceList); } private void addUsedSpace(List<FreeSpace> usedSpaceList) { usedSpaceList.add(new FreeSpace(0, 50, 50, 30, 30, 30)); usedSpaceList.add(new FreeSpace(0, 80, 80, 10, 20, 15)); usedSpaceList.add(new FreeSpace(36, 35, 50, 50, 30, 30)); usedSpaceList.add(new FreeSpace(0, 50, 0, 70, 50, 30)); usedSpaceList.add(new FreeSpace(0, 0, 0, 90, 20, 20)); } }结果
大立方体和待切除的小立方体
切除小立方体之后剩余的空间
总结
到此这篇关于java代码实现空间切割的文章就介绍到这了,更多相关java空间切割内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。