@@ -1605,16 +1605,16 @@ def trnorm(T: SE3Array) -> SE3Array:
16051605
16061606
16071607@overload
1608- def trinterp (start : Optional [SO3Array ], end : SO3Array , s : float ) -> SO3Array :
1608+ def trinterp (start : Optional [SO3Array ], end : SO3Array , s : float , shortest : bool = True ) -> SO3Array :
16091609 ...
16101610
16111611
16121612@overload
1613- def trinterp (start : Optional [SE3Array ], end : SE3Array , s : float ) -> SE3Array :
1613+ def trinterp (start : Optional [SE3Array ], end : SE3Array , s : float , shortest : bool = True ) -> SE3Array :
16141614 ...
16151615
16161616
1617- def trinterp (start , end , s ):
1617+ def trinterp (start , end , s , shortest = True ):
16181618 """
16191619 Interpolate SE(3) matrices
16201620
@@ -1624,6 +1624,8 @@ def trinterp(start, end, s):
16241624 :type end: ndarray(4,4) or ndarray(3,3)
16251625 :param s: interpolation coefficient, range 0 to 1
16261626 :type s: float
1627+ :param shortest: take the shortest path along the great circle for the rotation
1628+ :type shortest: bool, default to True
16271629 :return: interpolated SE(3) or SO(3) matrix value
16281630 :rtype: ndarray(4,4) or ndarray(3,3)
16291631 :raises ValueError: bad arguments
@@ -1663,12 +1665,12 @@ def trinterp(start, end, s):
16631665 if start is None :
16641666 # TRINTERP(T, s)
16651667 q0 = r2q (end )
1666- qr = qslerp (qeye (), q0 , s )
1668+ qr = qslerp (qeye (), q0 , s , shortest = shortest )
16671669 else :
16681670 # TRINTERP(T0, T1, s)
16691671 q0 = r2q (start )
16701672 q1 = r2q (end )
1671- qr = qslerp (q0 , q1 , s )
1673+ qr = qslerp (q0 , q1 , s , shortest = shortest )
16721674
16731675 return q2r (qr )
16741676
@@ -1679,7 +1681,7 @@ def trinterp(start, end, s):
16791681 q0 = r2q (t2r (end ))
16801682 p0 = transl (end )
16811683
1682- qr = qslerp (qeye (), q0 , s )
1684+ qr = qslerp (qeye (), q0 , s , shortest = shortest )
16831685 pr = s * p0
16841686 else :
16851687 # TRINTERP(T0, T1, s)
@@ -1689,7 +1691,7 @@ def trinterp(start, end, s):
16891691 p0 = transl (start )
16901692 p1 = transl (end )
16911693
1692- qr = qslerp (q0 , q1 , s )
1694+ qr = qslerp (q0 , q1 , s , shortest = shortest )
16931695 pr = p0 * (1 - s ) + s * p1
16941696
16951697 return rt2tr (q2r (qr ), pr )
0 commit comments