times

operator fun Motor.times(next: Motor): Motor

Motor * Motor => Motor
Returns the single motor performing this motion, then next's.

Proper composed with proper stays proper: two rigid motions chain into one rigid motion. Rotation angles add through the half-angle representation, so compositions whose angles sum past a full turn come back as the negated motor — the identical motion, comparing unequal as a value (see Versor).

Receiver

The motor applied first.

Return

The composite Motor.

Parameters

next

The motor applied after this one.


operator fun Flector.times(next: Flector): Motor

Flector * Flector => Motor
Returns the single motor performing this motion, then next's.

Improper composed with improper is proper: the orientation flips cancel, and two mirror motions chain into a rigid one — a rotation by twice the angle between crossing mirror lines, a translation when they are parallel. The same mirror line taken with opposite orientations composes to the negated identity motor — the identity motion, comparing unequal as a value (see Versor).

Receiver

The flector applied first.

Return

The composite Motor.

Parameters

next

The flector applied after this one.


operator fun Flector.times(next: Motor): Flector

Flector * Motor => Flector
Returns the single flector performing this motion, then next's.

Improper composed with proper stays improper: the mirror's orientation flip survives the rigid motion, so the composite is again a transflection.

Receiver

The flector applied first.

Return

The composite Flector.

Parameters

next

The motor applied after this one.


operator fun Motor.times(next: Flector): Flector

Motor * Flector => Flector
Returns the single flector performing this motion, then next's.

Proper composed with improper is improper: the rigid motion feeds into the mirror and the orientation flip remains, so the composite is again a transflection.

Receiver

The motor applied first.

Return

The composite Flector.

Parameters

next

The flector applied after this one.


operator fun Versor.times(next: Versor): Versor

Versor * Versor => Versor
Returns the single versor performing this motion, then next's.

The composition for operands typed only as Versor: it dispatches to the concrete pairing, so two motors or two flectors compose into a Motor and a mixed pair into a Flector. Operands with concrete static types resolve to those forms directly and keep their precise return types.

Receiver

The versor applied first.

Return

The composite versor — a Motor for two motors or two flectors, a Flector for a mixed pair.

Parameters

next

The versor applied after this one.


operator fun <T : Shape> T.times(versor: Versor): T

Shape * Versor => Shape
Returns this shape moved by versor.

The action for a receiver typed only as Shape: it dispatches on the shape's kind to that shape's own * Versor form, so one motion spelling covers every shape; a receiver with a concrete static type resolves to the per-shape forms directly. The result is the receiver's own class: the moved geometry returns through the shape's copy hook, preserving a subclass that overrides it.

Receiver

The Shape to move.

Return

The moved shape, as the receiver's class.

Parameters

versor

The motion to apply.

Type Parameters

T

The receiver's type, preserved in the result.

Throws

when moving a Polygon lands two consecutive vertices rounded-coincident at the SCALE quantum.

when moving a Polyline lands two consecutive vertices rounded-coincident at the SCALE quantum.