2022-11-30 12:52:16 +11:00
|
|
|
!-----------------------------------------------------------------------
|
2022-11-30 13:24:24 +11:00
|
|
|
!-
|
|
|
|
! test program for the project "gravity field"
|
|
|
|
!-
|
2022-11-30 12:52:16 +11:00
|
|
|
!-----------------------------------------------------------------------
|
2022-11-24 10:52:13 +11:00
|
|
|
program essai
|
2022-11-28 23:47:44 +11:00
|
|
|
use realfield
|
2022-11-30 12:52:16 +11:00
|
|
|
use spitpgm ! XXX
|
|
|
|
|
2022-11-24 10:52:13 +11:00
|
|
|
implicit none
|
|
|
|
|
2022-12-01 08:46:44 +11:00
|
|
|
call init_random()
|
2022-11-24 10:52:13 +11:00
|
|
|
|
2022-12-12 10:57:00 +11:00
|
|
|
call essai_near_planet(9999, 4096)
|
2022-11-28 23:47:44 +11:00
|
|
|
|
2022-12-01 08:46:44 +11:00
|
|
|
STOP 'BECAUSE YOLO'
|
2022-11-24 10:52:13 +11:00
|
|
|
|
2022-11-30 12:52:16 +11:00
|
|
|
contains
|
|
|
|
!-----------------------------------------------------------------------
|
|
|
|
!-
|
2022-12-12 10:57:00 +11:00
|
|
|
! computation of thr nearest planet
|
2022-12-01 08:46:44 +11:00
|
|
|
!-
|
2022-12-12 10:57:00 +11:00
|
|
|
subroutine essai_near_planet(nbplanets, szfield)
|
|
|
|
integer, intent(in) :: nbplanets, szfield
|
|
|
|
|
|
|
|
integer, dimension(:,:), allocatable :: map
|
|
|
|
integer :: ix, iy
|
|
|
|
real :: fx, fy, dx, dy
|
|
|
|
integer :: near, ipl, errcode
|
|
|
|
real :: curdist, smalldist
|
|
|
|
type(massbody) :: planets(nbplanets)
|
|
|
|
|
|
|
|
print *, "near planets test", nbplanets, szfield
|
2022-12-01 08:46:44 +11:00
|
|
|
|
2022-12-12 10:57:00 +11:00
|
|
|
allocate(map(szfield, szfield), stat=errcode)
|
|
|
|
map = -1
|
|
|
|
|
|
|
|
! create some random bodies
|
|
|
|
do ipl=1, nbplanets
|
|
|
|
planets(ipl)%posx = rand() * szfield
|
|
|
|
planets(ipl)%posy = rand() * szfield
|
|
|
|
planets(ipl)%serial = ipl
|
|
|
|
end do
|
|
|
|
! call save_bodies_to_txt_file(planets, "planets.txt")
|
|
|
|
|
|
|
|
! loop over all the location of the field
|
|
|
|
do ix=1, szfield
|
|
|
|
fx = real(ix)
|
|
|
|
do iy=1, szfield
|
|
|
|
fy = real(iy)
|
|
|
|
|
|
|
|
near = -1
|
|
|
|
smalldist = 1e37
|
|
|
|
! loop over all the planet's bodies
|
|
|
|
do ipl=1, nbplanets
|
|
|
|
! compute the "fake" distance
|
|
|
|
dx = fx - planets(ipl)%posx
|
|
|
|
dy = fy - planets(ipl)%posy
|
|
|
|
curdist = (dx*dx) + (dy*dy)
|
|
|
|
if (curdist .LT. smalldist) then
|
|
|
|
near = ipl
|
|
|
|
smalldist = curdist
|
|
|
|
endif
|
|
|
|
end do ! loop on ipl
|
|
|
|
|
|
|
|
map(ix, iy) = mod(near, 255)
|
|
|
|
|
|
|
|
enddo
|
|
|
|
|
|
|
|
write(0, *) "row", ix, " on", szfield
|
2022-12-01 08:46:44 +11:00
|
|
|
|
|
|
|
enddo
|
2022-11-24 10:52:13 +11:00
|
|
|
|
2022-12-12 10:57:00 +11:00
|
|
|
call spit_as_pgm_8(map, "nearest.pgm")
|
2022-11-24 10:52:13 +11:00
|
|
|
|
2022-11-28 23:47:44 +11:00
|
|
|
end subroutine
|
2022-11-30 12:52:16 +11:00
|
|
|
!-----------------------------------------------------------------------
|
2022-11-24 10:52:13 +11:00
|
|
|
|
|
|
|
end program
|