Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将小立方体放入给定的卷中,并在网页上以图形方式表示它?_Java_Graphics_3d_Linear Algebra - Fatal编程技术网

Java 如何将小立方体放入给定的卷中,并在网页上以图形方式表示它?

Java 如何将小立方体放入给定的卷中,并在网页上以图形方式表示它?,java,graphics,3d,linear-algebra,Java,Graphics,3d,Linear Algebra,我的查询是以编程方式显示在较大体积的多维数据集(如存储单元)内,许多给定的非规则(但矩形)多维数据集(即长方体)的拟合情况 理解数学部分。就像在线性规划/线性代数中一样,我们可以添加所有较小立方体的拟合体积,以找出较大立方体体积的最佳拟合。 实际要求是在网页上以图形方式(最好是3d)显示或允许此配件。如有可能,允许用户与配件交互,即洗牌立方体的放置等 另外,由于我是一名Java开发人员,所以我会选择Java或相关语言/框架。但是,如果最终结果得到满足,我可以使用任何其他技术/框架/语言 注意:重

我的查询是以编程方式显示在较大体积的多维数据集(如存储单元)内,许多给定的非规则(但矩形)多维数据集(即长方体)的拟合情况

理解数学部分。就像在线性规划/线性代数中一样,我们可以添加所有较小立方体的拟合体积,以找出较大立方体体积的最佳拟合。 实际要求是在网页上以图形方式(最好是3d)显示或允许此配件。如有可能,允许用户与配件交互,即洗牌立方体的放置等

另外,由于我是一名Java开发人员,所以我会选择Java或相关语言/框架。但是,如果最终结果得到满足,我可以使用任何其他技术/框架/语言

注意:重量也是一个问题(参数)。在任何给定的存储单元中都有可以堆叠的最大重量。 此外,由于存储单元可以在未经允许的情况下(被小偷)访问,所以将立方体堆叠在一个单元中的成本也是有限的。用户可能希望在一个具有更高安全性的单元中安装成本更高的立方体,反之亦然

示例:允许在给定房间中安装包含家用电子设备的多个矩形盒。这些盒子可能是电视机、冰箱、洗衣机、洗碗机、游戏机、Xbox360等。这些盒子的不同尺寸,是为了让您了解在满足有限体积的同时会发生什么

如果有任何FOSS库/项目(甚至是非FOSS库或项目),欢迎指向它的指针。

免责声明:好的,我知道它不能100%回答您的问题,也不能100%回答它非常旧的代码(从老式的CVS评论中可以得出结论)今天,我不会再这样写了。它仍然在Java8上运行,不过,我对它进行了测试。但除了解决水从上到下流经长方体3D矩阵(取决于矩阵(象征某种瑞士奶酪)的“泄漏”程度)这一信息学难题外,它还通过Java 3D使用一些非常简单的3D可视化。因此,您需要安装Java3D并将相应的库放到类路径中

3D输出如下所示:

包装vhs.bwinfo.cheese;
//$Id:Cuboid.java,v1.1.2.12006/01/1019:48:41$
导入javax.media.j3d.Appearance;
导入javax.media.j3d.quadraray;
导入javax.media.j3d.Shape3D;
导入javax.vecmath.Point3f;
导入javax.vecmath.TexCoord2f;
导入javax.vecmath.Vector3f;
公共类长方体扩展了Shape3D{
专用静态最终浮动位置=+0.5f;
专用静态最终浮动负=-0.5f;
私有静态最终点3f[]点=新点3f[]{
新的第3F点(负,负,负),
新的第3F点(正、负、负),
新点3F(正、负、正),
新点3F(负、负、正),
新点3F(负、正、负),
新的第3F点(正、正、负),
新点3F(位置,位置,位置),
新点3F(负、正、正)
};
私有静态最终TexCoord2f[]TEX_COORDS=新TexCoord2f[]{
新TexCoord2f(0,1),
新TexCoord2f(1,1),
新TexCoord2f(1,0),
新TexCoord2f(0,0)
};
私有静态最终整数顶点_格式=
四坐标数组|
四元数组。法线|
QuadArray.TEXTURE_坐标_2;
公共长方体(float-scaleX、float-scaleY、float-scaleZ){
点3f[]点=新点3f[8];
对于(int i=0;i<8;i++)
点[i]=新点3f(
点[i].x*scaleX,
点[i].y*scaleY,
点[i].z*scaleZ
);
点3f[]顶点={
点[3],点[2],点[1],点[0],//底部
点[4],点[5],点[6],点[7],//顶部
点[7],点[3],点[0],点[4],//左
点[6],点[5],点[1],点[2],//右
点[7],点[6],点[2],点[3],//前方
点[5]、点[4]、点[0]、点[1]//返回
};
四元数组几何体=新的四元数组(24,顶点_格式);
几何。设置坐标(0,顶点);
对于(int i=0;i<24;i++)
几何坐标(0,i,TEX_坐标[i%4]);
向量3f normal=新向量3f();
Vector3f v1=新Vector3f();
Vector3f v2=新Vector3f();
点3f[]pts=新点3f[4];
对于(int i=0;i<4;i++)
pts[i]=新点3f();
用于(int face=0;face<6;face++){
几何坐标(面*4,点);
v1.sub(分[0],分[2]);
v2.分包商(分包商[1],分包商[3]);
正常交叉(v1,v2);
normal.normalize();
对于(int i=0;i<4;i++)
几何。设置法线((面*4+i),法线);
}
集合几何(几何);
设置外观(新外观());
}
公共长方体(浮点缩放因子){
这(scaleFactor,scaleFactor,scaleFactor);
}
}
包装vhs.bwinfo.cheese;
//$Id:LeakyCheese.java,v1.2.2 2006/01/10 15:37:14$
导入com.sun.j3d.utils.applet.JMainFrame;
导入javax.swing.*;
导入java.util.Random;
导入静态java.lang.System.out;
公共级漏纸{
私有内部宽度=20,高度=20,深度=20;
private int numclass=100,samplesPerClass=100;
专用双pMin=0,pMax=1;
专用双pDiff=pMax-pMin;
私有双类大小=pDiff/numclass;
私有int[]统计;
枚举{奶酪、空气、水}
最终私人地产[]奶酪;
私有静态最终随机RND=新随机();
公共漏壶(
整数宽度,整数高度,整数深度,
int numclass,int samplesPerClass,
双pMin,双pMax
) {
这个。宽度=宽度;
高度=高度;
这个。深度=深度;
this.numClasses=numClasses;
this.samplesPerClass=samplesPerClass;
this.pMin=pMin;
this.pMax=pMax;
pDiff=pMax-pMin;
classSize=pDiff/numclass;
奶酪=
// create the cube 
var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } ) );

// set coordinates, rotation, and scale of the cubes
object.position.x = ...
object.position.y = ...
object.position.z = ...
object.rotation.x = ...
object.rotation.y = ...
object.rotation.z = ...
object.scale.x = ...
object.scale.y = ...
object.scale.z = ...

// lighting stuff
object.castShadow = true;
object.receiveShadow = true;

// add to scene and list of objects
scene.add( object );
objects.push( object );