first Julia set plotted
This commit is contained in:
		
							parent
							
								
									2578d3cd6b
								
							
						
					
					
						commit
						a41a630889
					
				
							
								
								
									
										4
									
								
								Fraktalism/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Fraktalism/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					julia
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*.pgm
 | 
				
			||||||
							
								
								
									
										19
									
								
								Fraktalism/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Fraktalism/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					GFOPT  = -Wall -Wextra -time -g
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ---------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					spitpgm.o:	spitpgm.f90 Makefile
 | 
				
			||||||
 | 
						gfortran $(GFOPT) -c $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fraktals.o:	fraktals.f90 Makefile
 | 
				
			||||||
 | 
						gfortran $(GFOPT) -c $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OBJS = spitpgm.o fraktals.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ---------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					julia:		julia.f90 Makefile $(OBJS)
 | 
				
			||||||
 | 
						gfortran $(GFOPT) $<  $(OBJS)    -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ---------------------------------------------
 | 
				
			||||||
							
								
								
									
										65
									
								
								Fraktalism/fraktals.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								Fraktalism/fraktals.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					module fraktals
 | 
				
			||||||
 | 
					  implicit none
 | 
				
			||||||
 | 
					  contains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					subroutine simple_julia(pic, cx, cy)
 | 
				
			||||||
 | 
					    implicit none
 | 
				
			||||||
 | 
					    integer, intent(inout), dimension (:,:)  ::  pic
 | 
				
			||||||
 | 
					    real, intent(in)                         ::  cx, cy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    integer      ::  ix, iy, width, height
 | 
				
			||||||
 | 
					    real         ::  fx, fy
 | 
				
			||||||
 | 
					    complex      ::  Z, C
 | 
				
			||||||
 | 
					    integer      ::  iter, maxiter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    width  = ubound(pic, 1)
 | 
				
			||||||
 | 
					    height = ubound(pic, 2)
 | 
				
			||||||
 | 
					    print *, "image size : ", width, height
 | 
				
			||||||
 | 
					    ! print *, "constante  : ", cx, cy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maxiter = 500
 | 
				
			||||||
 | 
					    C = complex(cx, cy)
 | 
				
			||||||
 | 
					    print *, "C = ", C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    do ix = 1, width
 | 
				
			||||||
 | 
					      fx = (float(ix) / (float(width)/4.0) - 2.0)
 | 
				
			||||||
 | 
					      do iy = 1, height
 | 
				
			||||||
 | 
					        fy = (float(iy) / (float(height)/4.0) - 2.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          ! ------ traitement du pixel
 | 
				
			||||||
 | 
					          iter = 0
 | 
				
			||||||
 | 
					          Z = complex(fx, fy)
 | 
				
			||||||
 | 
					          do while ( (modulus2(Z) .LT. 4.0) .AND.     &
 | 
				
			||||||
 | 
					                     (iter < maxiter) )
 | 
				
			||||||
 | 
					            Z = (Z * Z) + C
 | 
				
			||||||
 | 
					            iter = iter + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          end do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          pic(ix, iy) = iter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          ! print *, ix, iy, "    ", fx, fy, "    ", iter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      enddo
 | 
				
			||||||
 | 
					    enddo 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end subroutine
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					function dist0 (x, y)
 | 
				
			||||||
 | 
					  implicit none
 | 
				
			||||||
 | 
					  real, intent(in)    :: x, y
 | 
				
			||||||
 | 
					  real                :: dist0
 | 
				
			||||||
 | 
					  dist0 = ( x*x + y*y )
 | 
				
			||||||
 | 
					end function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					function modulus2(pt)
 | 
				
			||||||
 | 
					  implicit none
 | 
				
			||||||
 | 
					  complex, intent(in)    ::   pt
 | 
				
			||||||
 | 
					  real                   ::   modulus2
 | 
				
			||||||
 | 
					  modulus2 = real(pt)*real(pt) + imag(pt)*imag(pt)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end module fraktals
 | 
				
			||||||
							
								
								
									
										30
									
								
								Fraktalism/julia.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Fraktalism/julia.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					! 
 | 
				
			||||||
 | 
					!    this is the main programm
 | 
				
			||||||
 | 
					! 
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					program julia
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    use spitpgm
 | 
				
			||||||
 | 
					    use fraktals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    implicit none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    integer, dimension(640, 480)    ::    picz
 | 
				
			||||||
 | 
					    integer                         ::    argc
 | 
				
			||||||
 | 
					    character(200)                  ::    filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    argc = IARGC()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (1 .NE. argc) then
 | 
				
			||||||
 | 
					      STOP ": JULIA PROGGY NEED A FILENAME"
 | 
				
			||||||
 | 
					    endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    call getarg(1, filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    call simple_julia(picz, 0.3, 0.6)
 | 
				
			||||||
 | 
					    call spit_as_pgm(picz, trim(filename))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end program
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
							
								
								
									
										50
									
								
								Fraktalism/spitpgm.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Fraktalism/spitpgm.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					module spitpgm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    implicit none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    contains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					subroutine spit_as_pgm(pic, fname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ! implicit none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    integer, intent(in), dimension (:,:)  ::  pic
 | 
				
			||||||
 | 
					    character (len=*), intent(in)         ::  fname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    integer   :: io, foo
 | 
				
			||||||
 | 
					    integer   :: ix, iy
 | 
				
			||||||
 | 
					    real      :: fk, fpix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print *, "> spit_as_pgm to ", fname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    open(newunit=io, file=fname)
 | 
				
			||||||
 | 
					    write (io, '(a2)') "P2"
 | 
				
			||||||
 | 
					    write (io, '(i0," ",i0)')  size(pic, 1), size(pic, 2)
 | 
				
			||||||
 | 
					    write (io, '(i0)') 65535
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foo = MAXVAL(pic)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (foo .EQ. 0) then
 | 
				
			||||||
 | 
					        print *, " IS SOMETHING WRONG GOING TO HAPPEN ?"
 | 
				
			||||||
 | 
					        do ix = 1, size(pic)
 | 
				
			||||||
 | 
					            write (io, "(i0)") 0
 | 
				
			||||||
 | 
					        enddo
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        fk = float(foo)  / 65535.0
 | 
				
			||||||
 | 
					        print *, "  max pix value", foo, "  fk =  ", fk
 | 
				
			||||||
 | 
					        do iy = 1, ubound(pic, 2)
 | 
				
			||||||
 | 
					            do ix = 1, ubound(pic, 1)
 | 
				
			||||||
 | 
					                 fpix = float(pic(ix, iy)) / fk
 | 
				
			||||||
 | 
					                 write (io, "(i0)") int(fpix)
 | 
				
			||||||
 | 
					            end do
 | 
				
			||||||
 | 
					        end do
 | 
				
			||||||
 | 
					    endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    close(io)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end subroutine
 | 
				
			||||||
 | 
					!-----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end module spitpgm
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user