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.