Node:Applying Transforms to Points Intro, Next:Inverting Transforms, Previous:Transforms, Up:Transforms

A `Transform`

t is applied to a
`Point`

P using the binary `*=`

operation
(`Point::operator*=(const Transform&)`

)
which performs matrix multiplication of `P.transform`

by `t`

.
See Point Reference; Operators.

Point P(0, 1); Transform t; t.rotate(90); t.show("t:"); -| t: 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 1 P *= t; P.show_transform("P:"); -| P: Transform: 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 1 P.show("P:"); -| P: (0, 0, -1)

In the example above, there is no real need to use a `Transform`

,
since `P.rotate(90)`

could have been called directly.
As constructions become more complex, the power of `Transforms`

becomes clear:

1. Point p0(0, 0, 0); 2. Point p1(10, 5, 10); 3. Point p2(16, 14, 32); 4. Point p3(25, 50, 99); 5. Point p4(12, 6, 88); 6. Transform a; 7. a.shift(2, 3, 4); 8. a.scale(1, 3, 1); 9. p2 *= p3 *= a; 10. a.rotate(p0, p1, 75); 11. p4 *= a; 12. p2.show("p2:"); -| p2: (18, 51, 36) 13. p3.show("p3:"); -| p3: (27, 159, 103) 14. p4.show("p4:"); -| p4: (24.4647, -46.2869, 81.5353)

In this example, a is shifted and scaled, and a is applied
to both in line 9. This works, because
the binary operation
`operator*=(const Transform& t)`

returns `t`,
making it possible to chain invocations of `*=`

.
Following this, a is rotated
75 degrees

about the line through p_0 and p_1. Finally, all three transformations, which are stored in a, are applied to p_4.