Julia set: Difference between revisions

Content added Content deleted
m (→‎{{header|C}}: Remove vanity tags)
(→‎{{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 ) {
for ^$w -> $x {
^$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 * 360, 1, ?$i).reverse;
$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/60) % 2) - 1 ) );
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..^60 { $c, $x, 0 }
when 0..^(1/6) { $c, $x, 0 }
when 60..^120 { $x, $c, 0 }
when 1/6..^(1/3) { $x, $c, 0 }
when 120..^180 { 0, $c, $x }
when 1/3..^(1/2) { 0, $c, $x }
when 180..^240 { 0, $x, $c }
when 1/2..^(2/3) { 0, $x, $c }
when 240..^300 { $x, 0, $c }
when 2/3..^(5/6) { $x, 0, $c }
when 300..^360 { $c, 0, $x }
when 5/6..1 { $c, 0, $x }
}
}
( $r, $g, $b ) = map { (($_+$m) * 255).Int }, $r, $g, $b;
( $r, $g, $b ).map: ((*+$m) * 255).Int
}</lang>
}</lang>