Types/Turtle/TerdragonCurve.ps1
|
<# .SYNOPSIS Generates a Terdragon Curve. .DESCRIPTION Generates a Terdragon curve using turtle graphics. .LINK https://en.wikipedia.org/wiki/Dragon_curve#Terdragon .EXAMPLE turtle TerdragonCurve .EXAMPLE turtle id Terdragon1 TerdragonCurve 42 1 .EXAMPLE turtle id Terdragon2 TerdragonCurve 42 2 .EXAMPLE turtle id Terdragon3 TerdragonCurve 42 3 .EXAMPLE turtle id Terdragon4 TerdragonCurve 42 4 .EXAMPLE turtle id Terdragon5 TerdragonCurve 42 5 .EXAMPLE turtle id Terdragon6 TerdragonCurve 42 6 .EXAMPLE turtle id Terdragon7 TerdragonCurve 42 7 .EXAMPLE turtle id Terdragon8 TerdragonCurve 42 8 .EXAMPLE turtle id EndlessTerdragon TerdragonCurve PatternTransform = @{ 'scale' = 0.9 'rotate' = 45 } PatternAnimation @( "<animateTransform attributeName='patternTransform' attributeType='XML' type='scale' values='1;0.9;1' dur='19s' repeatCount='indefinite' additive='sum' />" "<animateTransform attributeName='patternTransform' attributeType='XML' type='skewY' values='30;-30;30' dur='67s' repeatCount='indefinite' additive='sum' />" "<animateTransform attributeName='patternTransform' attributeType='XML' type='skewX' values='30;-30;30' dur='83s' repeatCount='indefinite' additive='sum' />" ) #> param( [double]$Size = $( Get-Random -Min 42 -Max 84 ), [int]$Order = ( 5,6,7,8 | Get-Random ), [double]$Angle = 120 ) return $this.LSystem('F', [Ordered]@{ F = 'F+F-F' }, $Order, [Ordered]@{ '\+' = { $this.Rotate($Angle) } '-' = { $this.Rotate($Angle * -1) } '[F]' = { $this.Forward($Size) } }) |