# Transforms

## Overview

Doodle supports rotating, scaling, translation, and reflections with the Transform algebra. In theory, you can apply any transform to any picture. In practice, some transforms are more useful with some pictures than others. For example, a circle will look the same no matter how much you rotate it, but a square will look different.

In the following code, we create a hut (a triangle on top of a rectangle) and apply rotation, scaling, translation and vertical reflection to it.

```
import doodle.core.*
import doodle.java2d.*
import doodle.syntax.all.*
val hut =
Picture
.triangle(50, 50)
.fillColor(Color.black)
.strokeColor(Color.red)
.above(Picture.rectangle(50, 50).fillColor(Color.blue))
val rotatedHut = hut.rotate(45.degrees)
val scaledHut = hut.scale(1.5, 1.5)
val translatedHut = hut.translate(500, 50)
val verticallyReflectedHut = hut.verticalReflection
```

### Rotation

The `rotate`

method rotates a picture by a given angle. The angle is specified in radians, but you can use the `degrees`

method to convert degrees to radians. Here we rotate the hut by 45 degrees.

### Scaling

The `scale`

method scales a picture by a given factor in the x and y directions. Here we scale the hut by 1.5 in both directions.

### Translation

The `translate`

method moves a picture by a given amount in the x and y directions. Here we move the hut to the point (500, 50).

### Reflection

The `verticalReflection`

method reflects a picture vertically. Similarly, the `horizontalReflection`

method reflects a picture horizontally.

## Implementation

These methods are available on Transform algebra. Rotation and scaling are available on Image as well.