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

### Inverting Transforms

Inversion is another operation that can be performed on `Transforms`. This makes it possible to reverse the effect of a `Transform`, which may represent multiple transformations.

```     Point p;
Transform t;
t.shift(1, 2, 3);
t.scale(2, 3, 4);
t.rotate(45, 45, 30);
t.show("t:");
-| t:
1.22   0.707    1.41       0
0.238    2.59    -1.5       0
-3.15    1.45       2       0
-7.74    10.2    4.41       1
p *= t;
p.show("p:");
-| p: (-7.74, 10.2, 4.41)
Transform u;
u = t.inverse();
u.show("u:");
-| u:
0.306  0.0265  -0.197 2.85e-09
0.177   0.287  0.0906 -1.12e-09
0.354  -0.167   0.125       0
-1      -2      -3       1
p *= u;
p.show("p:");
-| p: (0, 0, 0)
u *= t;
u.show("u:");
-| u:
1       0       0       0
0       1       0       0
0       0       1       0
0       0       0       1
```

If `inverse()` is called with no argument, or with the argument `false`, it returns a `Transform` representing its inverse, and remains unchanged. If it is called with the argument `true`, it is set to its inverse.

Complete reversal of the transformations applied to a `Point`, as in the previous example, probably won't make much sense. However, partial reversal is a valuable technique. For example, it is used in `rotate()` for rotation about a line defined by two `Points`. The following example merely demonstrates the basic principle; an example that does something useful would be too complicated.

```     Transform t;
t.shift(3, 4, 5);
t.rotate(45);
t.scale(2, 2, 2);
Point p;
p *= t;
p.show("p:");
-| p: (6, 12.7279, 1.41421)
t.inverse(true);
p.rotate(90, 90);
p *= t;
p.show("p:");
-| p: (3.36396, -5.62132, -2.37868)
```