Vector 基于法线的旋转向量

Vector 基于法线的旋转向量,vector,rotation,directx,rotational-matrices,euler-angles,Vector,Rotation,Directx,Rotational Matrices,Euler Angles,给定左手坐标系中由XZ平面定义的半球表面上的一组点: 给定一个平面的法向量,该平面定义了另一个任意半球: 如何定义旋转矩阵,使我能够将第一半球的每个点(向量)转换为第二半球的对应点 如果可能,使用球坐标N作为旋转角度的旋转矩阵会很方便,其中$\theta$是从$0$到$\pi$(直观地从Y到-Y)的极角,$\phi$是从$0$到$2\pi$(从X回到X穿过+Z,-X,-Z)的方位角.建立旋转矩阵的第一步是定义绕单轴旋转的(3)顺序。在您的情况下,对于2个角度,2次旋转就足够了(对于φ和θ) 我

给定左手坐标系中由XZ平面定义的半球表面上的一组点:

给定一个平面的法向量,该平面定义了另一个任意半球:

如何定义旋转矩阵,使我能够将第一半球的每个点(向量)转换为第二半球的对应点


如果可能,使用球坐标N作为旋转角度的旋转矩阵会很方便,其中$\theta$是从$0$到$\pi$(直观地从Y到-Y)的极角,$\phi$是从$0$到$2\pi$(从X回到X穿过+Z,-X,-Z)的方位角.

建立旋转矩阵的第一步是定义绕单轴旋转的(3)顺序。在您的情况下,对于2个角度,2次旋转就足够了(对于φ和θ)

我总是提到 对于phi和θ的使用,我可能是错的(关于你的约定),但我尽量说清楚

我个人的顺序可能是:首先,在[0,2pi]中围绕Y轴旋转一个角度φ,假设N与Y平行,将“旧”X和Z轴与“新”轴对齐。 然后围绕“新=已旋转”Z轴旋转角度θ,使“新”Y轴沿N

那么,让我们构建我们的矩阵。围绕Y的旋转具有此结构(我使用;为了断开线,R始终为3x3)

从旧系统到新系统的完全旋转是两个矩阵的乘积,记住哪一个先出现

R = R_z*R_y
事实上,我们希望在旧系统中转换一组三维坐标a,因此:

b = R*a = R_z*R_y*a = R_z*(R_y*a)   

得到新的坐标b

你知道有无限多的解吗?你需要一个切线向量来得到唯一的解。如果你在一个网格上,也许你可以将切线和双切线与u和v方向对齐。如果我不需要一个特定的解决方案,而是一个正确的解决方案,不管是哪一个呢?
b = R*a = R_z*R_y*a = R_z*(R_y*a)