Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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_C++_Matrix_3d_Rotation - Fatal编程技术网

Java 如何基于方向向量计算旋转矩阵?

Java 如何基于方向向量计算旋转矩阵?,java,c++,matrix,3d,rotation,Java,C++,Matrix,3d,Rotation,在我的3D世界实现中,我使用方向向量(单位向量)来决定3D对象的方向 每个三维对象都有自己的方向向量,默认情况下,方向为V3(1,0,0),原点为V3(0,0,0) 这就是我如何应用方向旋转矩阵“D”(矩阵“A”用于围绕三维对象的方向向量作为轴旋转,这似乎很好): 我的问题是创建正确的方向旋转矩阵,该矩阵将三维对象沿其各自方向向量的方向旋转 我一点也不确定我做错了什么。。。我的想法是首先向一个方向旋转立方体,然后围绕该方向的轴旋转立方体。在所有这些之后是位置变换等 谢谢你们的帮助,伙计们 听起来

在我的3D世界实现中,我使用方向向量(单位向量)来决定3D对象的方向

每个三维对象都有自己的方向向量,默认情况下,方向为V3(1,0,0),原点为V3(0,0,0)

这就是我如何应用方向旋转矩阵“D”(矩阵“A”用于围绕三维对象的方向向量作为轴旋转,这似乎很好):

我的问题是创建正确的方向旋转矩阵,该矩阵将三维对象沿其各自方向向量的方向旋转

我一点也不确定我做错了什么。。。我的想法是首先向一个方向旋转立方体,然后围绕该方向的轴旋转立方体。在所有这些之后是位置变换等


谢谢你们的帮助,伙计们

听起来像是在试图沿3D对象的前向向量方向移动它。为此,需要对象的位置(x、y、z)和3个向量(向前、向上和向右)。您可以使用基于俯仰偏航和滚动的矢量数学旋转3个矢量(请参见下面的链接)。对于向前移动,然后将对象的位置加上速度乘以向前向量,即:位置+=速度*向前


使用下面发布的完整示例代码了解如何实现您自己的版本

听起来像是在试图沿3D对象的前向向量方向移动它。为此,需要对象的位置(x、y、z)和3个向量(向前、向上和向右)。您可以使用基于俯仰偏航和滚动的矢量数学旋转3个矢量(请参见下面的链接)。对于向前移动,然后将对象的位置加上速度乘以向前向量,即:位置+=速度*向前


使用下面发布的完整示例代码了解如何实现您自己的版本

沿向量方向旋转。。。呵呵?旋转通常围绕一个固定的轴(可以作为向量给出)在某个方向上旋转,但我不明白你想做什么。此外,问题是甚么?你得到了错误的结果?你得到了什么?假设你有一个金字塔,也就是5个顶点被8条边包围。。。此棱锥体的中心位于V3(0,0,0),其中尖顶的位置位于V3(0,0,1)。金字塔的其他点位于V3(+-1,+-1,-1)。因此,底部有4个顶点,顶部有1个顶点->金字塔。我还有一个方向向量,这个向量决定了金字塔应该面对的方向。。。所以我想做的是,根据方向向量计算RoationMatrix,这样我可以旋转金字塔中的所有顶点,使金字塔的顶部朝向给定的方向。部分回应tobi303:什么不起作用?请给出一个例子,说明导致问题的输入类型、代码为该输入生成的输出以及您认为输出应该是什么。(除非错误很明显——比如抛出异常或其他什么——请说明为什么您的输出比代码生成的更正确。)还有一个术语问题:您使用的术语“变换矩阵”和“旋转矩阵”似乎可以互换(有时带有“定向”前缀)。它们在你的例子中是相同的东西,还是我遗漏了一个不同点?如果它们是相同的,那么如果你选择一个术语并坚持使用它——可能是“旋转矩阵”,因为这就是你的代码所称的。是的,旋转矩阵。。。我不知道我为什么写转换。。。我想要的是让我的3d对象面向一个方向,这个方向由我的“方向向量”决定。另外,当一个对象朝向dir向量的方向时,我希望能够围绕dir向量进一步旋转对象。我想我想要实现的是俯仰偏航滚转?我正在做一个太空射击/模拟器游戏..沿矢量方向旋转。。。呵呵?旋转通常围绕一个固定的轴(可以作为向量给出)在某个方向上旋转,但我不明白你想做什么。此外,问题是甚么?你得到了错误的结果?你得到了什么?假设你有一个金字塔,也就是5个顶点被8条边包围。。。此棱锥体的中心位于V3(0,0,0),其中尖顶的位置位于V3(0,0,1)。金字塔的其他点位于V3(+-1,+-1,-1)。因此,底部有4个顶点,顶部有1个顶点->金字塔。我还有一个方向向量,这个向量决定了金字塔应该面对的方向。。。所以我想做的是,根据方向向量计算RoationMatrix,这样我可以旋转金字塔中的所有顶点,使金字塔的顶部朝向给定的方向。部分回应tobi303:什么不起作用?请给出一个例子,说明导致问题的输入类型、代码为该输入生成的输出以及您认为输出应该是什么。(除非错误很明显——比如抛出异常或其他什么——请说明为什么您的输出比代码生成的更正确。)还有一个术语问题:您使用的术语“变换矩阵”和“旋转矩阵”似乎可以互换(有时带有“定向”前缀)。它们在你的例子中是相同的东西,还是我遗漏了一个不同点?如果它们是相同的,那么如果你选择一个术语并坚持使用它——可能是“旋转矩阵”,因为这就是你的代码所称的。是的,旋转矩阵。。。我不知道我为什么写转换。。。我想要的是让我的3d对象面向一个方向,这个方向由我的“方向向量”决定。另外,当一个对象朝向dir向量的方向时,我希望能够围绕dir向量进一步旋转对象。我想我想要实现的是俯仰偏航滚转?我在做
Model3D model = actor.model;
// Loops through all the edges in the model
for (int i = 0; i < model.edges.length; i++) {
    M3 D = directionMatrix(actor);
    M3 R = rotationMatrix(actor);
    // Draws a line based on each edge in the model.
    // Each line consists of two points a and b.
    // The matrix R rotates the points around a given axis.
    // The D matrix rotates the points towards a given axis - not around it.
    S.drawLine(g,
        D.mul(R.mul(model.points[model.edges[i].a])).scale(actor.scale),
        D.mul(R.mul(model.points[model.edges[i].b])).scale(actor.scale)
    );
}
public M3 directionalRotationMatrix(c_Actor3D actor) {
    double x =  Math.atan2(actor.direction.z, actor.direction.y);
    double y =  Math.atan2(actor.direction.x, actor.direction.z);
    double z =  Math.atan2(actor.direction.y, actor.direction.x);
    double sin_x = Math.sin(x), sin_y = Math.sin(y), sin_z = Math.sin(z);
    double cos_x = Math.cos(x), cos_y = Math.cos(y), cos_z = Math.cos(z);
    return new M3(
            cos_x * cos_y, (cos_x * sin_y * sin_z) - (sin_x * cos_z),
            (cos_x * sin_y * cos_z) + (sin_x * sin_z), sin_x * cos_y, (sin_x * sin_y * sin_z) + (cos_x * cos_z),
            (sin_x * sin_y * cos_z) - (cos_x * sin_z), -sin_y, cos_y * sin_z, cos_y * cos_z);
}