Julia set: Difference between revisions
Content added Content deleted
(FutureBasic solution moved to here from BASIC group) |
m (Put FutureBasic entry in correct location) |
||
Line 1,836: | Line 1,836: | ||
{{FormulaeEntry|page=https://formulae.org/?script=examples/Julia_set}} |
{{FormulaeEntry|page=https://formulae.org/?script=examples/Julia_set}} |
||
=={{header|Go}}== |
|||
Using the Goroutines results in a performance improvement of about three times on my four-core machine. |
|||
<syntaxhighlight lang="go">package main |
|||
import ( |
|||
"image" |
|||
"image/color" |
|||
"image/png" |
|||
"log" |
|||
"os" |
|||
"sync" |
|||
) |
|||
func main() { |
|||
const ( |
|||
width, height = 800.0, 600.0 |
|||
maxIter = 255 |
|||
cX, cY = -0.7, 0.27015 |
|||
fileName = "julia.png" |
|||
) |
|||
img := image.NewNRGBA(image.Rect(0, 0, width, height)) |
|||
var wg sync.WaitGroup |
|||
wg.Add(width) |
|||
for x := 0; x < width; x++ { |
|||
thisx := float64(x) |
|||
go func() { |
|||
var tmp, zx, zy float64 |
|||
var i uint8 |
|||
for y := 0.0; y < height; y++ { |
|||
zx = 1.5 * (thisx - width/2) / (0.5 * width) |
|||
zy = (y - height/2) / (0.5 * height) |
|||
i = maxIter |
|||
for zx*zx+zy*zy < 4.0 && i > 0 { |
|||
tmp = zx*zx - zy*zy + cX |
|||
zy = 2.0*zx*zy + cY |
|||
zx = tmp |
|||
i-- |
|||
} |
|||
img.Set(int(thisx), int(y), color.RGBA{i, i, i << 3, 255}) |
|||
} |
|||
wg.Done() |
|||
}() |
|||
} |
|||
wg.Wait() |
|||
imgFile, err := os.Create(fileName) |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
defer imgFile.Close() |
|||
if err := png.Encode(imgFile, img); err != nil { |
|||
imgFile.Close() |
|||
log.Fatal(err) |
|||
} |
|||
}</syntaxhighlight> |
|||
=={{header|FutureBasic}}== |
=={{header|FutureBasic}}== |
||
Line 2,042: | Line 1,986: | ||
{{output}} |
{{output}} |
||
[[File:Julia Set.png]] |
[[File:Julia Set.png]] |
||
=={{header|Go}}== |
|||
Using the Goroutines results in a performance improvement of about three times on my four-core machine. |
|||
<syntaxhighlight lang="go">package main |
|||
import ( |
|||
"image" |
|||
"image/color" |
|||
"image/png" |
|||
"log" |
|||
"os" |
|||
"sync" |
|||
) |
|||
func main() { |
|||
const ( |
|||
width, height = 800.0, 600.0 |
|||
maxIter = 255 |
|||
cX, cY = -0.7, 0.27015 |
|||
fileName = "julia.png" |
|||
) |
|||
img := image.NewNRGBA(image.Rect(0, 0, width, height)) |
|||
var wg sync.WaitGroup |
|||
wg.Add(width) |
|||
for x := 0; x < width; x++ { |
|||
thisx := float64(x) |
|||
go func() { |
|||
var tmp, zx, zy float64 |
|||
var i uint8 |
|||
for y := 0.0; y < height; y++ { |
|||
zx = 1.5 * (thisx - width/2) / (0.5 * width) |
|||
zy = (y - height/2) / (0.5 * height) |
|||
i = maxIter |
|||
for zx*zx+zy*zy < 4.0 && i > 0 { |
|||
tmp = zx*zx - zy*zy + cX |
|||
zy = 2.0*zx*zy + cY |
|||
zx = tmp |
|||
i-- |
|||
} |
|||
img.Set(int(thisx), int(y), color.RGBA{i, i, i << 3, 255}) |
|||
} |
|||
wg.Done() |
|||
}() |
|||
} |
|||
wg.Wait() |
|||
imgFile, err := os.Create(fileName) |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
defer imgFile.Close() |
|||
if err := png.Encode(imgFile, img); err != nil { |
|||
imgFile.Close() |
|||
log.Fatal(err) |
|||
} |
|||
}</syntaxhighlight> |
|||
=={{header|Haskell}}== |
=={{header|Haskell}}== |