Compare commits

..

No commits in common. "cfc8ea6b63c0bfcef96a4f48fae3af95c5de1968" and "355d61df23ff45b0f7046bf026af15c82eefea4f" have entirely different histories.

12 changed files with 42 additions and 151 deletions

View File

@ -5,7 +5,6 @@ nbimg.inc
*.gif *.gif
*.blbs *.blbs
*.mp4 *.mp4
*.lst
frames/* frames/*
log.* log.*
@ -13,6 +12,4 @@ exportbloubs
genbloubs genbloubs
movebloubs movebloubs
mergebloubs mergebloubs
essai
core

View File

@ -2,34 +2,25 @@
all: genbloubs movebloubs exportbloubs mergebloubs all: genbloubs movebloubs exportbloubs mergebloubs
# ------------------------------------------------------------
GFOPT = -Wall -Wextra -g -time GFOPT = -Wall -Wextra -g -time
OBJS = bloubspace.o povstuff.o mathstuff.o OBJS = bloubspace.o povstuff.o mathstuff.o
# ------------------------------------------------------------ # ------------------------------------------------------------
essai: essai.f90 Makefile mathstuff.o
gfortran $(GFOPT) $< mathstuff.o -o $@
# ------------------------------------------------------------
initial.blbs: genbloubs Makefile initial.blbs: genbloubs Makefile
./genbloubs $@ 1000 ./genbloubs $@ 1000
in.blbs: genbloubs Makefile in.blbs: genbloubs Makefile
./genbloubs $@ 30000 ./genbloubs $@ 300
out.blbs: in.blbs mergebloubs Makefile out.blbs: in.blbs mergebloubs Makefile
./mergebloubs $< $@ ./mergebloubs $< $@
out.lst: out.blbs exportbloubs Makefile
./exportbloubs $< > $@
# ------------------------------------------------------------ # ------------------------------------------------------------
bloubspace.o: bloubspace.f90 Makefile bloubspace.o: bloubspace.f90 Makefile
gfortran $(GFOPT) -pg -c $< gfortran $(GFOPT) -c $<
povstuff.o: povstuff.f90 Makefile povstuff.o: povstuff.f90 Makefile
gfortran $(GFOPT) -c $< gfortran $(GFOPT) -c $<
@ -49,7 +40,7 @@ exportbloubs: exportbloubs.f90 Makefile $(OBJS)
gfortran $(GFOPT) $< $(OBJS) -o $@ gfortran $(GFOPT) $< $(OBJS) -o $@
mergebloubs: mergebloubs.f90 Makefile $(OBJS) mergebloubs: mergebloubs.f90 Makefile $(OBJS)
gfortran $(GFOPT) $< $(OBJS) -o $@ gfortran $(GFOPT) $< $(OBJS) -o $@
# ------------------------------------------------------------ # ------------------------------------------------------------

View File

@ -5,7 +5,7 @@ C'est quoi ?
Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné
dans lequel se déplacent des **bloubs**, lesquels sont dans lequel se déplacent des **bloubs**, lesquels sont
des sortes de particule des sortes de particule
munie de certaines propriétés (age, grosseur, vitesses, etc...). munie de certaines propriétés.
Lesquelles évoluent en fonction du temps. Lesquelles évoluent en fonction du temps.
## Description d'un bloub ## Description d'un bloub
@ -18,60 +18,17 @@ Lesquelles évoluent en fonction du temps.
real :: px, py, pz real :: px, py, pz
real :: vx, vy, vz real :: vx, vy, vz
real :: radius real :: radius
integer :: age integer :: seq
end type t_bloubs end type t_bloubs
``` ```
C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire. C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire.
On peut en fabriquer des gazillions, et ensuite
les lacher dans un espace clôt, avec des parois
rebondissantes. Chaque choc va un peu les user, et au bout d'un moment,
ils vont mourir. C'est comme ça.
## Comment ça fonctionne ? ## Comment ça fonctionne ?
Pas trop mal pour un premier jet. Il suffit de lire Pas trop mal pour un premier jet. Il suffit de lire
le script `runme.sh` pour avoir une idée de l'enchainement le script `runme.sh` pour avoir une idée de l'enchainement
des opérations. Lequel enchainement est décrit plus bas. des opérations.
## Les logiciels
Pour le moment, l'ensemble des opérations est gérée par un script shell
qui enchaine des opérations plus élémentaires. Oui, je sais, ce n'est
pas optimal, mais c'est un cadre idéal pour les bricolages hasardeux.
Ces opérations agissent sur des fichiers de type `.blsb` qui sont,
vu du fortran, des dumps séquentiels du type t_bloubs. Un format
de fichier qui va être modifié assez souvent, ne gardez pas d'archives.
### genbloubs
Fabrication d'une population de bloubs plus ou moins aléatoires.
Deux paramètres : le nom du fichier et le nombre de bloubs.
Les règles de génération devraient être paramétrables.
### movebloubs
Le cœur actif du système : c'est lui qui, à chaque tick, va déplacer
les bloubs, gérer les rebonds avec la boudary-box, éliminer les
bloubs usés par les chocs, et faire naitre de nouveaux bloubs
si le besoin s'en fait sentir.
Seul problème, il n'a pas de notion directe du temps, parce qu'il est
juste de passage dans un pipeline.
### exportbloubs
Sortie sur `stdout` de certaines propriétes des bloubs, qui seront
reprise par un (ou des) scripts écrits en `awk`, afin de générer
ce qu'il faut pour les différents moteurs de rendu.
Bon, pour le moment, il n'y a que POVray :)
### mergebloubs
Alors, celui-ci, il n'est pas vraiment au point.
## TODO ## TODO

View File

@ -88,10 +88,10 @@ module bloubspace
blb%py = 0.0 blb%py = 0.0
blb%age = blb%age + 1 blb%age = blb%age + 1
endif endif
if (4.99 .lt. blb%py) then !! if (5.0 .lt. blb%py) then
blb%vy = -1.0 * blb%vy blb%vy = -1.0 * blb%vy
blb%age = blb%age + 1 blb%age = blb%age + 1
blb%py = 4.99 !! blb%py = 5.0
endif endif
if (5.0 .lt. blb%pz) then if (5.0 .lt. blb%pz) then

View File

@ -1,19 +0,0 @@
program essai
use mathstuff
implicit none
integer :: foo
real :: quux
double precision :: somme
call init_random_seed()
somme = 0.0
do foo=1, 200000
quux = rand()
somme = somme + quux
print *, foo, quux, somme/foo
enddo
end program

View File

@ -32,7 +32,7 @@ program genbloubs
if (0 .ne. errcode) then if (0 .ne. errcode) then
exit exit
endif endif
print *, bloub%px, bloub%py, bloub%pz, bloub%radius, bloub%age print *, bloub%px, bloub%py, bloub%pz, bloub%radius
compte = compte + 1 compte = compte + 1
enddo enddo

View File

@ -1,6 +1,7 @@
module mathstuff module mathstuff
implicit none implicit none
contains contains
! ---------------------------------------------------------------- ! ----------------------------------------------------------------
@ -12,8 +13,8 @@ module mathstuff
integer t3 integer t3
call itime(tarray) call itime(tarray)
t3 = 3600*tarray(1) + 60*tarray(2) + tarray(3) t3 = 200*tarray(1) + 20*tarray(2) + tarray(3)
write(0, '(A,3I3,A,I6)') "sranding: ", tarray, " --> ", t3 print *, tarray, ' --> ', t3
call srand(t3) call srand(t3)
end subroutine end subroutine

View File

@ -70,11 +70,6 @@ program mergebloubs
do ! infinite loop do ! infinite loop
print *, "============ PASS ", idx print *, "============ PASS ", idx
if (idx .EQ. NB_MAX_BLOUBS) then
write(0, '(I8, A)') idx, " max number of bloubs reached"
exit
endif
! read the next bloub from input file ! read the next bloub from input file
read (unit=inu, iostat=errcode) bloub read (unit=inu, iostat=errcode) bloub
if (0 .ne. errcode) then if (0 .ne. errcode) then
@ -94,7 +89,9 @@ program mergebloubs
! call display_bloub(les_bloubs(i), "DEAD ? WTF ?") ! call display_bloub(les_bloubs(i), "DEAD ? WTF ?")
cycle cycle
endif endif
rval = distance_of_bloubs(les_bloubs(i), bloub) rval = distance_of_bloubs(les_bloubs(i), bloub)
if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then
print *, "contact : ", i, idx, rval print *, "contact : ", i, idx, rval
call merge_two_bloubs(les_bloubs(i), bloub, newbloub) call merge_two_bloubs(les_bloubs(i), bloub, newbloub)
@ -102,21 +99,16 @@ program mergebloubs
nbr_merge = nbr_merge + 1 nbr_merge = nbr_merge + 1
merged = .TRUE. merged = .TRUE.
endif endif
enddo
enddo
if (merged) then if (merged) then
! put new bloub in the list
les_bloubs(idx) = newbloub les_bloubs(idx) = newbloub
bloub = newbloub
else else
! put old bloub in the list ! put old bloub in the list
les_bloubs(idx) = bloub les_bloubs(idx) = bloub
endif endif
write(outu, iostat=errcode) bloub ! no error control ?
if (0 .ne. errcode) then
STOP " : WRITE ERROR TO " // trim(outfile)
endif
idx = idx + 1 idx = idx + 1
! print *, "idx = ", idx ! print *, "idx = ", idx

View File

@ -54,7 +54,7 @@ program movebloubs
endif endif
! moving and boundingboxing ! moving and boundingboxing
call move_bloub (bloub, 0.14) call move_bloub (bloub, 0.15)
call bound_a_blob (bloub) call bound_a_blob (bloub)
call green_soylent (bloub) call green_soylent (bloub)
if (.NOT. bloub%alive) then if (.NOT. bloub%alive) then
@ -78,10 +78,10 @@ program movebloubs
! ok, we have read all the bloubs in the input file ! ok, we have read all the bloubs in the input file
! insert some fancy conditional here ! insert some fancy conditional here
if (compteur .LT. 1600) then if (compteur .LT. 1500) then
if (rand() .LT. 0.05) then
call add_more_bloubs(outu, 8, 0.052) call add_more_bloubs(outu, 8, 0.075)
endif
endif endif
close(inu) ; close(outu) close(inu) ; close(outu)
@ -104,15 +104,13 @@ contains
type(t_bloubs) :: bloub type(t_bloubs) :: bloub
integer :: foo integer :: foo
write(0, '(A,I4,1X,A)') "adding", nbre, "bloubs"
do foo=1, nbre do foo=1, nbre
bloub%nick = 'newbie ' bloub%nick = 'newbie '
bloub%alive = .TRUE.
call random_pv(bloub) call random_pv(bloub)
bloub%radius = wtf bloub%radius = wtf
bloub%age = 1 bloub%age = foo
bloub%alive = .TRUE.
! call display_bloub (bloub, "new bloub") ! call display_bloub (bloub, "new bloub")
write(un) bloub ! no error control ? write(un) bloub ! no error control ?

View File

@ -7,7 +7,7 @@
INCFILE="bloubs.inc" INCFILE="bloubs.inc"
TMPPNG="/dev/shm/bloubs7.png" TMPPNG="/dev/shm/bloubs7.png"
POVOPT="+Q9 +a -v -d -W960 -H640 -WT2" POVOPT="+Q5 -a -v -d -W920 -H600 -WT2"
DDIR="frames" DDIR="frames"
LOGERR="log.error" LOGERR="log.error"
@ -15,7 +15,7 @@ LOGERR="log.error"
BLBS_IN="/dev/shm/in.blbs" BLBS_IN="/dev/shm/in.blbs"
BLBS_OUT="/dev/shm/out.blbs" BLBS_OUT="/dev/shm/out.blbs"
NBIMG=1200 NBIMG=600
make all make all
err=$? err=$?
@ -67,7 +67,7 @@ do
mv ${BLBS_OUT} ${BLBS_IN} mv ${BLBS_OUT} ${BLBS_IN}
echo echo
sleep 9 sleep 33
done done

View File

@ -21,7 +21,10 @@ global_settings {
object { object {
Bloubs Bloubs
finish { phong 0.33 specular 0.95 } texture {
pigment { color Gray60 }
finish { phong 0.58 specular 0.45 }
}
} }
plane { plane {
@ -36,7 +39,7 @@ plane {
#declare BH = 5; // H = taille en horizontal #declare BH = 5; // H = taille en horizontal
#declare BV = 5; // V = taille en vertical #declare BV = 5; // V = taille en vertical
#declare BR = 0.035; #declare BR = 0.028;
#declare Une_Borne = object #declare Une_Borne = object
{ {
@ -46,24 +49,21 @@ merge {
} }
} }
#declare Un_Cadre = object #declare Cadre_Haut = object
{ {
merge { merge {
#local Ruc = BR * 0.78; cylinder { <-BH, 0, -BH>, <-BH, 0, BH>, BR }
cylinder { <-BH, 0, -BH>, <-BH, 0, BH>, Ruc }
cylinder { < BH, 0, -BH>, < BH, 0, BH>, BR } cylinder { < BH, 0, -BH>, < BH, 0, BH>, BR }
cylinder { < BH, 0, -BH>, <-BH, 0, -BH>, BR } cylinder { < BH, 0, -BH>, <-BH, 0, -BH>, BR }
cylinder { < BH, 0, BH>, <-BH, 0, BH>, Ruc } cylinder { < BH, 0, BH>, <-BH, 0, BH>, BR }
} }
pigment { color Gray40 } pigment { color Gray50 }
} }
#declare Les_Bornes = object #declare Les_Bornes = object
{ {
union { union {
#local E = 0.02; object { Cadre_Haut translate y*(BV-0.05) }
object { Un_Cadre translate y*(BV-E) }
object { Un_Cadre translate y*E }
object { Une_Borne translate <-BH, 0, -BH> pigment { color Blue } } object { Une_Borne translate <-BH, 0, -BH> pigment { color Blue } }
object { Une_Borne translate < BH, 0, -BH> pigment { color Green } } object { Une_Borne translate < BH, 0, -BH> pigment { color Green } }
@ -75,41 +75,19 @@ union {
object { Les_Bornes } object { Les_Bornes }
// ---------------------------------------------------------- // ----------------------------------------------------------
#local D = 0.016;
#declare Fleche = object
{
merge {
sphere { <-0.05, 0, 0>, D }
cylinder { <1, 0, 0>, <-0.05, 0, 0>, D }
cone { <1, 0, 0>, D*3.1, <1.10, 0, 0>, 0.0001 }
}
}
#declare Repere = object
{
union {
object { Fleche pigment { color Red }}
object { Fleche rotate z*90 pigment { color Green }}
object { Fleche rotate y*270 pigment { color Blue }}
}
}
// ----------------------------------------------------------
// object { Repere scale 2+(1.9*NormClock) translate y*2.5 }
light_source { <9, 22, -17> color Gray80 } light_source { <9, 22, -17> color Gray80 }
light_source { <11, 19, 9> color Gray60 } light_source { <11, 19, 9> color Gray60 }
#declare XCAM = 8 -( NormClock*3 ); #declare HCAM = 5 + (11 * NormClock);
#declare YCAM = 5 + (11 * NormClock);
#fopen LC "log.camera" append #fopen LC "log.camera" append
#write (LC, clock, " ", NormClock, " ", YCAM, "\n") #write (LC, clock, " ", NormClock, " ", HCAM, "\n")
#fclose LC #fclose LC
camera { camera {
location <XCAM, YCAM, -16> location <7, HCAM, -16>
look_at <0, 1, 0> look_at <0, 1, 0>
right x*image_width/image_height right x*image_width/image_height
angle 48 angle 50
} }

View File

@ -11,12 +11,8 @@ BEGIN {
} }
{ {
if ($5 > 4) color = "Magenta" printf "\t\tsphere { <%f, %f, %f>, %f }\n", \
else color = "Cyan" $1, $2, $3, $4
pigment = "pigment { color " color " }"
printf "\t\tsphere { <%f, %f, %f>, %f %s }\n", \
$1, $2, $3, $4, pigment
count++ count++
} }