You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何旋转物体使其中心轴另一端落在Z轴上?

旋转物体使中心轴端点落在Z轴上的方法

假设已知中心轴的端点坐标为向量 $\boldsymbol{v} = (v_x, v_y, v_z)$(从原点出发),我们需要将其旋转到Z轴方向(这里以Z轴正方向为例),具体步骤如下:

1. 归一化向量

如果 $\boldsymbol{v}$ 不是单位向量,先计算其模长 $||v|| = \sqrt{v_x^2 + v_y^2 + v_z^2}$,然后归一化得到单位向量 $\boldsymbol{u}$:

u_x = v_x / ||v||
u_y = v_y / ||v||
u_z = v_z / ||v||

如果 $\boldsymbol{u}$ 已经和Z轴平行(比如 $\boldsymbol{u}=(0,0,1)$ 或 $(0,0,-1)$),直接跳过后续步骤,无需旋转。

2. 确定旋转轴

旋转轴是 $\boldsymbol{u}$ 与Z轴正方向向量 $\boldsymbol{z}=(0,0,1)$ 的叉积 $\boldsymbol{k}$:

k_x = u_y * 1 - u_z * 0 = u_y
k_y = u_z * 0 - u_x * 1 = -u_x
k_z = u_x * 0 - u_y * 0 = 0

这个轴垂直于 $\boldsymbol{u}$ 和Z轴,是旋转的中心轴。

3. 计算旋转角度

旋转角度 $\theta$ 是 $\boldsymbol{u}$ 和 $\boldsymbol{z}$ 的夹角,通过点积计算:

cosθ = u · z = u_z
sinθ = sqrt(1 - u_z²)

4. 构造旋转矩阵

用罗德里格斯旋转公式生成旋转矩阵 $R$,公式展开后得到具体元素:
$$
R = \begin{bmatrix}
u_z^2 + (1-u_z2)u_y2 & (1-u_z^2)u_xu_y - u_z u_x & u_x u_z (1-u_z^2) + u_y \sin\theta \
(1-u_z^2)u_xu_y + u_z u_x & u_z^2 + (1-u_z2)u_x2 & u_y u_z (1-u_z^2) - u_x \sin\theta \
-u_x \sin\theta & -u_y \sin\theta & u_z
\end{bmatrix}
$$

5. 对物体应用旋转

将物体上每个点的坐标 $\boldsymbol{p}=(x,y,z)$ 与旋转矩阵 $R$ 相乘,得到旋转后的坐标:

p'_x = R[0][0]*x + R[0][1]*y + R[0][2]*z
p'_y = R[1][0]*x + R[1][1]*y + R[1][2]*z
p'_z = R[2][0]*x + R[2][1]*y + R[2][2]*z

执行完这个操作后,中心轴的端点就会落在Z轴上。


内容的提问来源于stack exchange,提问作者StefanKorisnik3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:24:29