Exercises
Flat Polygon
Using the Turtle methods, Range
, and flatMap
, rewrite your method to create a polygon. The signature of polygon
is
def polygon(sides: Int, sideLength: Double): Image =
???
<div class="solution">
Using flatMap
we can make the code more compact than the explicit structural recursion we had to use before.
def polygon(sides: Int, sideLength: Double): Image = {
val rotation = Angle.one / sides
Turtle.draw((1 to sides).toList.flatMap { n =>
List(turn(rotation), forward(sideLength))
})
}
</div>
Flat Spiral
Using the Turtle methods, Range
, and flatMap
, rewrite your method to create the square spiral. The signature of squareSpiral
is
def squareSpiral(steps: Int, distance: Double, angle: Angle, increment: Double): Image =
???
<div class="solution">
Again, the result is more compact than the previous implementation without flatMap
. Isthis easier to read? I find it about the same. I belive comprehensibility is a function of familiarity, and we're (hopefully) by now becoming familiar with flatMap
.
def squareSpiral(steps: Int, distance: Double, angle: Angle, increment: Double): Image = {
Turtle.draw((1 to steps).toList.flatMap { n =>
List(forward(distance + (n * increment)), turn(angle))
})
}
</div>
L-System Art
In this exercise we want you to use your creativity to construct a picture of a natural object using your L-system implementation. You've seen many examples already that you can use an inspriation.