Types/Turtle/HilbertCurve.ps1

<#
.SYNOPSIS
    Hilbert Curve
.DESCRIPTION
    Draws a Hilbert Curve, using an L-System.

    A Hilbert Curve is a space-filling curve.
.EXAMPLE
    turtle id hilbert1 hilbertCurve 42 1
.EXAMPLE
    turtle id hilbert2 hilbertCurve 42 2
.EXAMPLE
    turtle id hilbert3 hilbertCurve 42 3
.EXAMPLE
    turtle id hilbert4 hilbertCurve 42 4
#>

param(
    # The size of each segment.
    [double]$Size = (Get-Random -Min 10 -Max 100),
    # The number of generations.
    [int]$Order = (3,4,5 | Get-Random),
    # The angle.
    [double]$Angle = 90
)        

return $this.LSystem('A',  [Ordered]@{
    A = '+BF-AFA-FB+'
    B = '-AF+BFB+FA-'
}, $Order, [Ordered]@{
    'F'     = { $this.Forward($Size) }
    '\+'    = { $this.Rotate($Angle) }
    '\-'    = { $this.Rotate($Angle * -1) }
})