def AngVec(cls, theta, v, *, unit='rad'): r""" Create an SE(3) pure rotation matrix from rotation angle and axis :param θ: rotation :type θ: float :param unit: angular units: 'rad' [default], or 'deg' :type unit: str :param v: rotation axis, 3-vector :type v: array_like :return: SE(3) matrix :rtype: SE3 instance ``SE3.AngVec(θ, v)`` is an SE(3) rotation defined by a rotation of ``θ`` about the vector ``v``. .. math:: \mbox{if}\,\, \theta \left\{ \begin{array}{ll} = 0 & \mbox{return identity matrix}\\ \ne 0 & \mbox{v must have a finite length} \end{array} \right. :seealso: :func:`~spatialmath.pose3d.SE3.angvec`, :func:`~spatialmath.pose3d.SE3.EulerVec`, :func:`~spatialmath.base.transforms3d.angvec2r` """ return cls(base.angvec2tr(theta, v, unit=unit), check=False)
def EulerVec(cls, w): r""" Construct a new SE(3) pure rotation matrix from an Euler rotation vector :param ω: rotation axis :type ω: 3-element array_like :return: SE(3) rotation :rtype: SE3 instance ``SE3.EulerVec(ω)`` is a unit quaternion that describes the 3D rotation defined by a rotation of :math:`\theta = \lVert \omega \rVert` about the unit 3-vector :math:`\omega / \lVert \omega \rVert`. Example: .. runblock:: pycon >>> from spatialmath import SE3 >>> SE3.EulerVec([0.5,0,0]) .. note:: :math:`\theta = 0` the result in an identity matrix, otherwise ``V`` must have a finite length, ie. :math:`|V| > 0`. :seealso: :func:`~spatialmath.pose3d.SE3.AngVec`, :func:`~spatialmath.base.transforms3d.angvec2tr` """ assert base.isvector(w, 3), 'w must be a 3-vector' w = base.getvector(w) theta = base.norm(w) return cls(base.angvec2tr(theta, w), check=False)
def AngVec(cls, theta, v, *, unit='rad'): """ Create an SE(3) pure rotation matrix from rotation angle and axis :param theta: rotation :type theta: float :param unit: angular units: 'rad' [default], or 'deg' :type unit: str :param v: rotation axis, 3-vector :type v: array_like :return: 4x4 homogeneous transformation matrix :rtype: SE3 instance ``SE3.AngVec(THETA, V)`` is an SE(3) rotation defined by a rotation of ``THETA`` about the vector ``V``. Notes: - If ``THETA == 0`` then return identity matrix. - If ``THETA ~= 0`` then ``V`` must have a finite length. :seealso: :func:`~spatialmath.pose3d.SE3.angvec`, :func:`spatialmath.base.transforms3d.angvec2r` """ return cls(tr.angvec2tr(theta, v, unit=unit), check=False)