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

如何对N维numpy向量绕N维单位向量v旋转theta弧度?

N维向量绕单位向量旋转的实现方法

核心原理

在N维空间中绕单位向量v旋转θ弧度,本质是保持v方向的分量不变,仅在垂直于v的N-1维子空间内对向量的垂直分量进行平面旋转。该方法是3D空间罗德里格斯旋转公式的高维推广,通过正交基构造+块对角旋转矩阵实现。

实现步骤(Numpy代码)

import numpy as np

def rotate_n_vector(x, v, theta):
    # 确保旋转轴v是单位向量
    v = v / np.linalg.norm(v)
    # 分解向量x为平行于v的分量和垂直分量
    proj_v_x = np.dot(x, v) * v
    perp_x = x - proj_v_x
    perp_norm = np.linalg.norm(perp_x)
    
    # 若x与v共线,旋转后向量不变
    if perp_norm < 1e-10:
        return x.copy()
    
    # 用Gram-Schmidt构造包含v的正交基
    # 前两个基向量:v,以及垂直分量的单位向量
    u = perp_x / perp_norm
    ortho_basis = np.column_stack([v, u])
    
    # 补充剩余的正交基向量
    dim = len(v)
    for i in range(2, dim):
        # 取标准基向量,投影到已有基的正交补空间
        e = np.zeros(dim)
        e[i] = 1
        for col in ortho_basis.T:
            e -= np.dot(e, col) * col
        # 单位化后加入基矩阵
        e_norm = np.linalg.norm(e)
        if e_norm > 1e-10:
            e = e / e_norm
            ortho_basis = np.column_stack([ortho_basis, e])
    
    # 构造块对角旋转矩阵:v方向分量不变,垂直子空间内做平面旋转
    rot_matrix = np.eye(dim)
    # 2D旋转矩阵块(对应垂直子空间的前两个基向量平面)
    rot_matrix[1, 1] = np.cos(theta)
    rot_matrix[1, 2] = -np.sin(theta)
    rot_matrix[2, 1] = np.sin(theta)
    rot_matrix[2, 2] = np.cos(theta)
    
    # 通过正交基的变换实现旋转
    x_rotated = ortho_basis @ rot_matrix @ ortho_basis.T @ x
    return x_rotated

关键说明

  1. 分量分解:任何N维向量都可拆分为平行于旋转轴v的分量(旋转后不变)和垂直分量(仅这部分参与旋转)。
  2. 正交基构造:通过Gram-Schmidt方法生成包含v的正交基,确保旋转矩阵的变换在正确的子空间内进行。
  3. 旋转矩阵设计:块对角矩阵保证v方向分量不受影响,仅在垂直子空间的一个平面内执行θ角度旋转,与3D空间绕轴旋转逻辑一致。
  4. 边界处理:当向量与旋转轴共线时,直接返回原向量,避免计算误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:27:05