Julia set: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→{{header|C}}: Remove vanity tags) |
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Small tweaks, finishes in 1/3 the time, same output) |
||
Line 1,174: | Line 1,174: | ||
sub julia ( $png ) { |
sub julia ( $png ) { |
||
^$w .race.map: -> $x { |
|||
for ^$h -> $y { |
for ^$h -> $y { |
||
my $z = Complex.new(($x - $w / 2) / $w * 3, ($y - $h / 2) / $h * 2); |
my $z = Complex.new(($x - $w / 2) / $w * 3, ($y - $h / 2) / $h * 2); |
||
Line 1,181: | Line 1,181: | ||
$z = $z*$z + $c; |
$z = $z*$z + $c; |
||
} |
} |
||
$png.set: $x, $y, |hsv2rgb($i / $maxIter |
$png.set: $x, $y, |hsv2rgb($i / $maxIter, 1, ?$i).reverse; |
||
} |
} |
||
} |
} |
||
} |
} |
||
sub hsv2rgb ( $h, $s, $v ){ |
sub hsv2rgb ( $h, $s, $v ){ # inputs normalized 0-1 |
||
my $c = $v * $s; |
my $c = $v * $s; |
||
my $x = $c * (1 - abs( (($h |
my $x = $c * (1 - abs( (($h*6) % 2) - 1 ) ); |
||
my $m = $v - $c; |
my $m = $v - $c; |
||
my ($r, $g, $b) = do given $h { |
my ($r, $g, $b) = do given $h { |
||
when 0..^ |
when 0..^(1/6) { $c, $x, 0 } |
||
when |
when 1/6..^(1/3) { $x, $c, 0 } |
||
when |
when 1/3..^(1/2) { 0, $c, $x } |
||
when |
when 1/2..^(2/3) { 0, $x, $c } |
||
when |
when 2/3..^(5/6) { $x, 0, $c } |
||
when |
when 5/6..1 { $c, 0, $x } |
||
} |
} |
||
( $r, $g, $b ) |
( $r, $g, $b ).map: ((*+$m) * 255).Int |
||
}</lang> |
}</lang> |
||