gpt4 book ai didi

java - 方向 vector 的旋转矩阵

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:40 24 4
gpt4 key购买 nike

我已经在互联网上玩了一段时间的一些算法,但我似乎无法让它们工作,所以我在这里抛出这个问题;

我正在尝试从一个点渲染一条速度 vector 线。画线并不难:只需插入一条长度为 velocity.length 的线即可进入图表。这会将线置于 y 轴方向的中心位置。我们现在需要通过适当的旋转和平移来获得它。

平移 vector 并不难计算:它是速度 vector 的一半。然而,旋转矩阵对我来说非常难以捉摸。给定方向 vector <x, y, z> ,我需要什么矩阵?

编辑 1:看;如果你不明白这个问题,你可能无法给我答案。

这是我目前拥有的:

                    Vector3f translation = new Vector3f();                    translation.scale(1f/2f, body.velocity);                    Vector3f vec_z = (Vector3f) body.velocity.clone();                    vec_z.normalize();                    Vector3f vec_y; // reference vector, will correct later                    if (vec_z.x == 0 && vec_z.z == 0) {                        vec_y = new Vector3f(-vec_z.y, 0f, 0f); // could be optimized                    } else {                        vec_y = new Vector3f(0f, 1f, 0f);                    }                    Vector3f vec_x = new Vector3f();                    vec_x.cross(vec_y, vec_z);                    vec_z.normalize();                    vec_y.cross(vec_x, vec_z);                    vec_y.normalize();                    vec_y.negate();                    Matrix3f rotation = new Matrix3f(                        vec_z.z, vec_z.x, vec_z.y,                        vec_x.z, vec_x.x, vec_x.y,                        vec_y.z, vec_y.x, vec_y.y                    );                    arrowTransform3D.set(rotation, translation, 1f);

基于 this article .是的,我已经尝试了标准旋转矩阵(vec_x.x、vec_y.x 等),但没有用。我一直在旋转列和行以查看是否有任何影响。

编辑 2:

对我评论中的粗鲁措辞表示歉意。

所以看起来有两个错误的组合;其中之一是 House MD 指出的(非常糟糕的变量命名:vec_z 实际上是 vec_y ,等等),另一个是我需要在将矩阵传递给渲染引擎之前反转矩阵(转置是关闭!)。所以修改后的代码是:

                    Vector3f vec_y = (Vector3f) body.velocity.clone();                    vec_y.normalize();                    Vector3f vec_x; // reference vector, will correct later                    if (vec_y.x == 0 && vec_y.z == 0) {                        vec_x = new Vector3f(-vec_y.y, 0f, 0f); // could be optimized                    } else {                        vec_x = new Vector3f(0f, 1f, 0f);                    }                    Vector3f vec_z = new Vector3f();                    vec_z.cross(vec_x, vec_y);                    vec_z.normalize();                    vec_x.cross(vec_z, vec_y);                    vec_x.normalize();                    vec_x.negate();                    Matrix3f rotation = new Matrix3f(                        vec_x.x, vec_x.y, vec_x.z,                        vec_y.x, vec_y.y, vec_y.z,                        vec_z.x, vec_z.y, vec_z.z                    );                    rotation.invert();

最佳答案

This你应该做什么

关于java - 方向 vector 的旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com