首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转所有点以与矢量对齐

旋转所有点以与矢量对齐
EN

Stack Overflow用户
提问于 2012-07-31 05:06:38
回答 2查看 425关注 0票数 0

我有一个向量v= (x,y,z),我想旋转所有点,使点(x,y,z) = (0,0,sqrt(x^2 + y^2 + z^2) )。换句话说,我想把矢量v的方向设为z轴,然后旋转所有点,这样就对了。

我希望点(1,1,0)指向(0,0,sqrt(2)),点(0,0,1)指向(-1/(sqrt(2)),-1/sqrt(2),0),给定v (1,1,0)。

我在Unity3D的左手轴系统中工作,其中y是垂直的。

我当前的方法是这样的,使用v= (vx,vy,vz),x,y,z是要旋转的点。

代码语言:javascript
复制
float vx = 1;
float vy = 1;
float vz = 0;



float c1 = -vz/(sqrt(vx*vx + vz*vz));
float c2 = -sqrt(vx*vx + vz*vz)/sqrt(vx*vx + vy*vy + vz*vz);
float s1 = -vx/(sqrt(vx*vx + vz*vz));
float s2 = -vy/sqrt(vx*vx + vy*vy + vz*vz);


float rx = x * c1  + y*s1*s2 - z*s1*c2;
float ry = x * 0 + y*c2 + z * s2;
float rz = x * s1 - y*s2*c1 + z*c1*c2;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 22:59:04

我找到了答案,通过取(0,0,1)的叉积找到旋转轴,然后用它作为旋转轴,角度是向量(0,0,1)和(vx,vy,vz)之间的角度。

http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

票数 0
EN

Stack Overflow用户

发布于 2012-07-31 05:18:28

您正在寻找一个具有fv=(0,0,1),|x|=|fx|的3x3矩阵f;这需要

代码语言:javascript
复制
      ( t1  t2  t3 )
f =   ( u1  u2  u3 )
      ( w1  w2  w3 )

其中w和v/ |v|,t,u,w是成对正交和|t|=|u|=|w|=1。

选择t和u取决于你想要做什么,但如果你只需要任何t和u,可以通过3d cross product获得一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11729587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档