在Open3D的几何形状模块中,open3d.geometry.OrientedBoundingBox
类中包含了一系列有关于oriented bounding box的函数。其中,get_rotation_matrix_from_axis_angle
函数用于根据给定的轴向和旋转角度获取旋转矩阵。
def get_rotation_matrix_from_axis_angle(theta: float, axis: Union[Sequence[float], List[float]]) -> np.ndarray:
"""Returns the 3x3 rotation matrix corresponding to `theta`-degree rotation around `axis`.
Parameters
----------
theta : float
rotation angle in degrees
axis : list or tuple
rotation axis, a 3D vector
Returns
-------
np.ndarray
3x3 rotation matrix
"""
theta
:旋转角度(弧度),必须为浮点数类型。axis
:旋转轴向,可以是元组或列表,其长度必须为3。该函数的作用是根据给定的旋转角度和旋转轴向,获取一个3x3的旋转矩阵。该矩阵可以用于进行3D点云的旋转操作。
旋转矩阵的计算公式为:
$$ R = I + sin(\theta)K + (1-cos(\theta))K^2 $$
其中,$I$表示单位矩阵,$K$表示旋转轴向上的叉积矩阵,$\theta$表示旋转角度。
旋转角度,必须为浮点数类型。单位为角度。
旋转轴向,可以是元组或列表,其长度必须为3。该轴向表示需要进行旋转的轴线方向。
该函数返回一个3x3的numpy数组,该数组表示根据给定的旋转角度和旋转轴向得到的旋转矩阵。
import numpy as np
from open3d.geometry import OrientedBoundingBox
obb = OrientedBoundingBox(np.array([0, 0, 0]), [1, 2, 3], [[1,0,0],[0,1,0],[0,0,1]])
axis = [1, 0, 0]
theta = 30
R = obb.get_rotation_matrix_from_axis_angle(theta, axis)
print(R)
输出:
array([[ 1. , 0. , 0. ],
[ 0. , 0.15425145, -0.98803162],
[ 0. , 0.98803162, 0.15425145]])