Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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_Math_Geometry_Lwjgl_Trigonometry - Fatal编程技术网

Java 获取旋转和缩放长方体顶点的三维坐标,包括所有轴上的缩放、中心位置和旋转

Java 获取旋转和缩放长方体顶点的三维坐标,包括所有轴上的缩放、中心位置和旋转,java,math,geometry,lwjgl,trigonometry,Java,Math,Geometry,Lwjgl,Trigonometry,我一直在绞尽脑汁想弄明白这个问题。 我有一个长方体,它在所有3轴上相对于世界的旋转,从它的中心开始,它在3D空间上,长方体的中心的位置和立方体在所有轴宽度、高度和深度上的比例。我需要找到长方体所有顶点的坐标。 在浏览互联网时,我只找到了2D案例的例子,无法理解如何进入3D空间。 有人能帮我吗?我将在用LWJGL轻量级Java游戏库制作的游戏引擎中使用它 编辑:对于@httpdigest: 这仍然不准确,有人能发现问题吗 编辑:解决方案: 角度需要以弧度为单位,感谢您的支持 如果您使用的是LWJG

我一直在绞尽脑汁想弄明白这个问题。 我有一个长方体,它在所有3轴上相对于世界的旋转,从它的中心开始,它在3D空间上,长方体的中心的位置和立方体在所有轴宽度、高度和深度上的比例。我需要找到长方体所有顶点的坐标。 在浏览互联网时,我只找到了2D案例的例子,无法理解如何进入3D空间。 有人能帮我吗?我将在用LWJGL轻量级Java游戏库制作的游戏引擎中使用它

编辑:对于@httpdigest:

这仍然不准确,有人能发现问题吗

编辑:解决方案:
角度需要以弧度为单位,感谢您的支持

如果您使用的是LWJGL,您也可以使用JOML,在这种情况下,您可能需要以下内容:

导入org.joml.*; 公共舱位{ 公共静态无效字符串[]args{ /*长方体中心位置*/ 浮动px=10,py=0,pz=0; /*围绕x、y和z的欧拉角*/ float ax=0,ay=0,az=float java.lang.Math.PI/2.0f; /*x、y和z的比例因子*/ 浮点数sx=1,sy=3,sz=1; /*建立变换矩阵*/ Matrix4f m=新Matrix4f
.translatepx,py,pz//欢迎来到StackOverflow。您的问题不太清楚,因为有多种方法可以定义它在所有3个轴上相对于世界中心的旋转。请更精确地定义它。但更重要的是,请解释这在实际计算机编程中是如何一个问题,而不是本网站的目的在数学方面,正如现在所显示的。你想用什么语言?正如现在所写的,我不确定这个问题与编程有什么关系。Java,LWJGL是我正在使用的@JanBoyer@RoryDaulton,我已经更新了这个问题。我不太确定这种类型的旋转的名称,但我只需要从2d转换到3d,我有一个例子[链接]中的2d答案我不是在寻找旋转的名称,而是在代码中给出的定义。定义三维旋转的一种方法是使用行列式为1的3x3正交矩阵。另一种方法是围绕平行于x轴的轴逆时针给出旋转角度,然后是平行于y轴的旋转角度,然后是平行于z轴的旋转角度。以及e是其他的。你的代码是如何定义旋转的?你可能需要展示一个代码示例。此外,你的2D链接由于不涉及旋转而毫无价值。嗨,谢谢你的帮助!它肯定比我以前拥有的要好,看看我是如何将其转换为LWJGL的,也许你可以发现问题,因为它似乎只有1 axis错了,我把赌注押在Z轴上,因为它在代码中的起始值不同。谢谢你的支持!如果你能解释为什么Z轴上的旋转在开始时是java.lang.Math.PI/2.0f,我将不胜感激。这些只是示例/伪值,显然你必须用位置的实际值替换它们是的@httpdigest,我做到了,它确实起了作用!谢谢你,祝你有一个美好的一周!
public Vector3f[] getExtents(){

    Matrix4f m = new Matrix4f();

    m.translate(getPosition());
    m.rotate(getRotation().x, new Vector3f(1, 0, 0));
    m.rotate(getRotation().y, new Vector3f(0, 1, 0));
    m.rotate(getRotation().z, new Vector3f(0, 0, 1));
    m.scale(new Vector3f(getScaleX(), getScaleY(), getScaleZ()));
    Vector3f[] corners = new Vector3f[8];
    for (int i = 0; i < corners.length; i++) {
        int x = i % 2 * 2 - 1;
        int y = i / 2 % 2 * 2 - 1;
        int z = i / 4 % 2 * 2 - 1;
        Vector4f corner = Matrix4f.transform(m, new Vector4f(x, y, z, 1), null);
        corners[i] = new Vector3f(corner.x, corner.y, corner.z);
    }
    return corners;
}