transform
函数用于对Open3D中的AxisAlignedBoundingBox
对象进行变换。它接受一个变换矩阵作为输入,可以实现平移、旋转、缩放等多种变换操作。
box.transform(transformation)
其中,box
为待变换的AxisAlignedBoundingBox
对象,transformation
为变换矩阵。
transformation
: ndarray, shape (4, 4) or (3, 3)
变换矩阵,是一个4x4的齐次变换矩阵或者3x3的欧氏变换矩阵。transform
函数返回值为None
,直接对原来的AxisAlignedBoundingBox
对象进行就地变换。
下面的示例展示了如何对一个AxisAlignedBoundingBox
对象进行变换:
import numpy as np
import open3d as o3d
# 创建一个AxisAlignedBoundingBox对象
box = o3d.geometry.AxisAlignedBoundingBox()
box.max_bound = np.array([1.0, 1.0, 1.0])
box.min_bound = np.array([0.0, 0.0, 0.0])
# 定义一个变换矩阵
theta = np.pi / 4
cos = np.cos(theta)
sin = np.sin(theta)
R = np.array([[cos, -sin, 0.0],
[sin, cos, 0.0],
[0.0, 0.0, 1.0]])
T = np.array([[1.0, 0.0, 0.0, 0.5],
[0.0, 1.0, 0.0, 0.5],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]])
transformation = R @ T
# 变换AxisAlignedBoundingBox对象
box.transform(transformation)
如果要对一个点云图进行旋转、平移、缩放等操作,请使用open3d.geometry.PointCloud
对象的变换函数,而不是open3d.geometry.AxisAlignedBoundingBox
对象的变换函数。因为AxisAlignedBoundingBox
对象的变换不会改变其中的点的位置,只会改变max_bound
和min_bound
属性。而PointCloud
对象的变换会改变其中的点的位置。