旋转矩阵 java,方向向量的旋转矩阵

我已经在网上玩了一段时间了,我似乎无法让它们工作,所以我把这个问题抛到了一边;

我试图从一个点绘制一条速度矢量线。画这条线并不难:只要插入一条有长度的线

velocity.length

在图表中。这将使线以Y轴方向的点为中心。我们现在需要在适当的旋转和平移中得到它。

平动矢量不难计算:它是速度矢量的一半。然而,旋转矩阵对我来说是非常难以捉摸的。给定方向向量

我需要什么样的矩阵?

编辑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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值