scipy.spatial.transform.RigidTransform.

__mul__#

RigidTransform.__mul__(self, RigidTransform other)#

Diese Transformation mit der anderen zusammensetzen.

Wenn p und q zwei Transformationen sind, dann ist die Komposition von „q gefolgt von p“ äquivalent zu p * q. In Bezug auf Transformationsmatrizen kann die Komposition als p.as_matrix() @ q.as_matrix() ausgedrückt werden.

In Bezug auf Translationen und Rotationen ist die Komposition, wenn sie auf einen Vektor v angewendet wird, äquivalent zu p.translation + p.rotation.apply(q.translation) + (p.rotation * q.rotation).apply(v).

Diese Funktion unterstützt die Komposition mehrerer Transformationen gleichzeitig. Die folgenden Fälle sind möglich:

  • Entweder p oder q enthält eine einzelne Transformation oder eine Transformation der Länge 1. In diesem Fall enthält das Ergebnis das Ergebnis der Komposition jeder Transformation im anderen Objekt mit der einen Transformation. Wenn beides einzelne Transformationen sind, ist das Ergebnis eine einzelne Transformation.

  • Beide p und q enthalten N Transformationen. In diesem Fall wird jede Transformation p[i] mit der entsprechenden Transformation q[i] zusammengesetzt und das Ergebnis enthält N Transformationen.

Parameter:
otherRigidTransform Instanz

Objekt, das die mit dieser zu komponierenden Transformationen enthält.

Rückgabe:
RigidTransform Instanz

Die komponierte Transformation.

Beispiele

>>> from scipy.spatial.transform import RigidTransform as Tf
>>> from scipy.spatial.transform import Rotation as R
>>> import numpy as np

Zwei Transformationen komponieren

>>> tf1 = Tf.from_translation([1, 0, 0])
>>> tf2 = Tf.from_translation([0, 1, 0])
>>> tf = tf1 * tf2
>>> tf.translation
array([1., 1., 0.])
>>> tf.single
True

Wenn auf einen Vektor angewendet, wird die Komposition von zwei Transformationen in Rechts-nach-Links-Reihenfolge angewendet.

>>> t1, r1 = [1, 2, 3], R.from_euler('z', 60, degrees=True)
>>> t2, r2 = [0, 1, 0], R.from_euler('x', 30, degrees=True)
>>> tf1 = Tf.from_components(t1, r1)
>>> tf2 = Tf.from_components(t2, r2)
>>> tf = tf1 * tf2
>>> tf.apply([1, 0, 0])
array([0.6339746, 3.3660254, 3.       ])
>>> tf1.apply(tf2.apply([1, 0, 0]))
array([0.6339746, 3.3660254, 3.       ])

Wenn mindestens eine der Transformationen nicht einzeln ist, ist das Ergebnis ein Stapel von Transformationen.

>>> tf1 = Tf.from_translation([1, 0, 0])
>>> tf2 = Tf.from_translation([[0, 2, 0], [0, 0, 3]])
>>> tf = tf1 * tf2
>>> tf.translation
array([[1., 2., 0.],
       [1., 0., 3.]])
>>> tf.single
False
>>> len(tf)
2