Julia set: Difference between revisions
Content added Content deleted
Line 1,380: | Line 1,380: | ||
</pre> |
</pre> |
||
'''Note''' that for images the first '''''y''''' value is the top. The call to the <code>linspace</code> procedure inverts the imaginary axis so that the set is displayed with '''''-1*i''''' at the bottom and '''''+1*i''''' at the top. |
'''Note''' that for images the first '''''y''''' value is the top. The call to the <code>linspace</code> procedure inverts the imaginary axis so that the set is displayed with '''''-1*i''''' at the bottom and '''''+1*i''''' at the top. |
||
This next version generates a Portable Gray Map (PGM)<br> |
|||
{{works with|Fortran|95 and later}} |
|||
[[File:julia-set-gray.png|480px|thumb|right]] |
|||
<lang fortran>! ============================================================================== |
|||
module julia_mod |
|||
! ---------------------------------------------------------------------------- |
|||
implicit none |
|||
character(*), parameter :: DEF_FSPC = 'julia.pgm' |
|||
complex(8), parameter :: DEF_SEED = (-0.798d0, 0.1618d0) |
|||
complex(8), parameter :: DEF_UL = (-1.5d0, 1.0d0) |
|||
complex(8), parameter :: DEF_LR = ( 1.5d0, -1.0d0) |
|||
integer, parameter :: NUM_COLS = 1024 |
|||
integer, parameter :: NUM_ROWS = 768 |
|||
contains |
|||
! ============================================================================ |
|||
subroutine juliaPGM( fspc, nr, nc, ul, lr, c ) |
|||
! -------------------------------------------------------------------------- |
|||
implicit none |
|||
character(*), intent(in) :: fspc ! path to the PGM file |
|||
integer, intent(in) :: nr ! number of rows |
|||
integer, intent(in) :: nc ! number of columns |
|||
complex(8), intent(in) :: ul ! upper left point on complex plane |
|||
complex(8), intent(in) :: lr ! lower right point on complex plane |
|||
complex(8), intent(in) :: c ! seed |
|||
! -------------------------------------------------------------------------- |
|||
real(8), allocatable :: X(:), Y(:) |
|||
integer :: un, ir, ic, i, clr |
|||
complex(8) :: z |
|||
integer, parameter :: max_cycle = 512 |
|||
! -------------------------------------------------------------------------- |
|||
allocate( X(nc) ) |
|||
allocate( Y(nr) ) |
|||
call linSpace( X, ul%RE, lr%RE ) |
|||
call linSpace( Y, ul%IM, lr%IM ) |
|||
open ( FILE=fspc, NEWUNIT=un, ACTION='WRITE', STATUS='REPLACE' ) |
|||
write ( un, 100 ) |
|||
write ( un, 110 ) |
|||
write ( un, 120 ) nc, nr |
|||
write ( un, 130 ) |
|||
do ir=1,nr |
|||
do ic=1,nc |
|||
z = cmplx( X(ic), Y(ir), kind=8 ) |
|||
clr = 0 |
|||
i = 0 |
|||
do while ( i .lt. max_cycle ) |
|||
z = z*z + c |
|||
if ( 2.0D0 .lt. CDABS(z) ) then |
|||
clr = modulo( i, 256 ) |
|||
exit |
|||
end if |
|||
i = i + 1 |
|||
end do |
|||
write ( un, 200 ) clr |
|||
end do |
|||
end do |
|||
close( un ) |
|||
deallocate( Y ) |
|||
deallocate( X ) |
|||
100 format( 'P2' ) |
|||
110 format( '# Created for Rosetta Code' ) |
|||
120 format( I0,1X,I0 ) |
|||
130 format( '255' ) |
|||
200 format( I0 ) |
|||
end subroutine juliaPGM |
|||
! ============================================================================ |
|||
subroutine linSpace( A, a1, a2 ) |
|||
! -------------------------------------------------------------------------- |
|||
implicit none |
|||
real(8), intent(inout) :: A(:) ! array of the elements in this linear space |
|||
real(8), intent(in) :: a1 ! value of the first element |
|||
real(8), intent(in) :: a2 ! value of the last element |
|||
! -------------------------------------------------------------------------- |
|||
integer :: i, n |
|||
real(8) :: delta |
|||
! -------------------------------------------------------------------------- |
|||
n = size(A) |
|||
delta = (a2-a1)/real(n-1,kind=8) |
|||
A(1) = a1 |
|||
do i=2,n |
|||
A(i) = A(i-1) + delta |
|||
end do |
|||
end subroutine linSpace |
|||
end module julia_mod |
|||
! ============================================================================== |
|||
program julia |
|||
! ---------------------------------------------------------------------------- |
|||
use julia_mod |
|||
implicit none |
|||
call juliaPGM( DEF_FSPC, NUM_ROWS, NUM_COLS, DEF_UL, DEF_LR, DEF_SEED ) |
|||
end program julia</lang> |
|||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |