Julia set: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
No edit summary |
||
Line 1,557: | Line 1,557: | ||
wend |
wend |
||
end</syntaxhighlight> |
end</syntaxhighlight> |
||
=={{header|FutureBasic}}== |
|||
<syntaxhighlight lang="futurebasic"> |
|||
#build CheckArrayBounds NO |
|||
output file "Julia Fractal Viewer |
|||
include "NSLog.incl" |
|||
begin record Complex |
|||
float real // real component of Complex Number |
|||
float imag // imaginary component of Complex Number |
|||
end record |
|||
_window = 1 |
|||
begin enum output 1 |
|||
_juliaView |
|||
end enum |
|||
void local fn BuildWindow |
|||
CGRect r = fn CGRectMake( 0, 0, 520, 600 ) |
|||
window _window, @"Rosetta Code Julia Set", r, NSWindowStyleMaskTitled + NSWindowStyleMaskClosable + NSWindowStyleMaskMiniaturizable |
|||
r = fn CGRectMake( 10, 10, 500, 580 ) |
|||
imageview _juliaView, YES,,r, NSImageScaleAxesIndependently, NSImageAlignCenter, NSImageFramePhoto, _window |
|||
end fn |
|||
local fn JuliaPoint( c as Complex, w as long, h as long, xl as float, xr as float, yb as float, yt as float, i as long, j as long ) as long |
|||
float ai, ar, cr, ci, t, x, y |
|||
long k, value |
|||
value = 1 |
|||
cr = c.real |
|||
ci = c.imag |
|||
x = ( ( float ) ( w - i - 1 ) * xl + ( float ) ( i ) * xr ) / ( float ) ( w - 1 ) |
|||
y = ( ( float ) ( h - j - 1 ) * yb + ( float ) ( j ) * yt ) / ( float ) ( h - 1 ) |
|||
ar = x |
|||
ai = y |
|||
for k = 0 to 199 |
|||
t = ar * ar - ai * ai + cr |
|||
ai = ar * ai + ai * ar + ci |
|||
ar = t |
|||
if ( 1000 < ar * ar + ai * ai ) |
|||
value = 0 |
|||
exit fn |
|||
end if |
|||
next k |
|||
end fn = value |
|||
void local fn JuliaRGB( c as Complex, w as long, h as long, xl as float, xr as float, yb as float, yt as float, rgb(0) as unsigned char ) |
|||
long i, j, juliaValue, k |
|||
k = 0 |
|||
for j = 0 to h - 1 |
|||
for i = 0 to w - 1 |
|||
juliaValue = fn JuliaPoint( c, w, h, xl, xr, yb, yt, i, j ) |
|||
rgb(k) = 255 * (1-juliaValue) |
|||
rgb(k+1) = 255 * (1-juliaValue) |
|||
rgb(k+2) = 255 |
|||
k += 3 |
|||
next i |
|||
next j |
|||
end fn |
|||
void local fn TGAWrite( w as long, h as long, rgb(0) as ^unsigned char, url as CFURLRef ) |
|||
CFMutableDataRef dta |
|||
unsigned char header1(11), header2(5) |
|||
BlockZero( @header1(0), 12 * sizeof(unsigned char) ) |
|||
header1(2) = 2 |
|||
header2(0) = w mod 256 |
|||
header2(1) = w/256 |
|||
header2(2) = h mod 256 |
|||
header2(3) = h/256 |
|||
header2(4) = 24 |
|||
header2(5) = 0 |
|||
dta = fn MutableDataWithCapacity(0) |
|||
MutableDataAppendBytes( dta, @header1(0), 12 * sizeof(unsigned char) ) |
|||
MutableDataAppendBytes( dta, @header2(0), 6 * sizeof(unsigned char) ) |
|||
MutableDataAppendBytes( dta, @rgb(0), w * h * 3 * sizeof(unsigned char) ) |
|||
fn DataWriteToURL( dta, url, NSDataWritingAtomic, NULL ) |
|||
ImageRef image = fn ImageWithData( dta ) |
|||
ImageViewSetImage( _juliaView, image ) |
|||
end fn |
|||
void local fn BuildJuliaSet( c as Complex ) |
|||
long h, w |
|||
float xl, xr, yb, yt |
|||
ptr p |
|||
CFURLRef url |
|||
// Create 1000x1000-pixel canvas for image |
|||
h = 1000 |
|||
w = 1000 |
|||
// Locate image on canvas |
|||
xl = -1.5 |
|||
xr = 1.5 |
|||
yb = -1.5 |
|||
yt = 1.5 |
|||
p = fn malloc( w * h * 3 * sizeof(unsigned char) ) |
|||
xref rgb(1) as unsigned char |
|||
rgb = p |
|||
// Create image data |
|||
fn JuliaRGB( c, w, h, xl, xr, yb, yt, @rgb(0) ) |
|||
// Create path to final image |
|||
url = fn URLFileURLWithPath( fn StringByExpandingTildeInPath( @"~/Desktop/julia_set.png" ) ) |
|||
// Write image data to file |
|||
fn TGAWrite( w, h, @rgb(0), url ) |
|||
free(p) |
|||
end fn |
|||
dim as Complex c |
|||
c.real = 0.355534 |
|||
c.imag = -0.337292 |
|||
// c.real = -0.8 |
|||
// c.imag = 0.156 |
|||
// c.real = 0.26 |
|||
// c.imag = 0.0016 |
|||
// c.real = 0.355 |
|||
// c.imag = 0.355 |
|||
// c.real = -0.4 |
|||
// c.imag = -0.59 |
|||
// c.real = -0.54 |
|||
// c.imag = 0.54 |
|||
fn BuildWindow |
|||
fn BuildJuliaSet( c ) |
|||
HandleEvents |
|||
</syntaxhighlight> |
|||
{{output}} |
|||
[[File:Julia Set.png]] |
|||
=={{header|Fōrmulæ}}== |
=={{header|Fōrmulæ}}== |