3D打印项目:生成将Z轴旋转至任意单位向量的旋转矩阵
旋转矩阵生成:将Z轴对齐到任意单位向量的最简方法
已知目标单位向量为 v = [vx, vy, vz],旋转矩阵的第三列已确定为该向量,形式如下:
matrix = [[u_x, w_x, vx], [u_y, w_y, vy], [u_z, w_z, vz]]
以下提供两种适配你需求的最简填充方式:
一、不在意绕目标轴扭转(适合圆柱体场景)
因为圆柱体绕自身中心轴旋转不影响打印形态,可直接用叉乘快速生成正交列向量:
- 生成新X轴向量 u:
- 先计算临时向量
u_temp = [1, 0, 0] × v = [0, -vz, vy] - 如果
u_temp不是零向量(即v不沿X轴),将其归一化得到u;若u_temp是零向量,改用u_temp = [0, 1, 0] × v = [vz, 0, -vx],再归一化得到u
- 先计算临时向量
- 生成新Y轴向量 w:
- 直接计算
w = v × u,由于v和u都是单位正交向量,w自动满足单位正交要求
- 直接计算
- 将u的分量填入矩阵第一列,w的分量填入第二列即可
二、无扭转的最直接方式
若要避免绕目标轴的额外扭转,保证原坐标系的“朝向”尽可能保留:
- 当v为原Z轴(
vz = 1)时,矩阵为单位矩阵 - 其他情况:
- 生成新X轴向量 u:取临时向量
u_temp = [-vy, vx, 0],归一化得到u(该向量在原X-Y平面内,且垂直于v在X-Y平面的投影,确保无扭转) - 生成新Y轴向量 w:计算
w = v × u,自动满足单位正交要求
- 生成新X轴向量 u:取临时向量
- 将u、w的分量分别填入矩阵第一、第二列
验证要点
生成后的矩阵需满足正交矩阵特性:各列向量两两点积为0,且每个列向量的模长为1,以此确保这是一个合法的旋转矩阵。
内容的提问来源于stack exchange,提问作者Joymaker
相关产品推荐
相关产品推荐

