Compare commits

...

7 Commits

Author SHA1 Message Date
tth
cfc8ea6b63 no milesatone reached... 2022-02-17 14:10:15 +01:00
tth
bc54e20011 cosmetic changes 2022-02-17 13:56:39 +01:00
tth
3343c48588 better crypto security in sranding 2022-02-17 13:41:09 +01:00
tth
45a695f9e0 cosmetic changes 2022-02-17 12:23:01 +01:00
tth
aa73934c72 + essai 2022-02-17 10:51:56 +01:00
tth
c07b5f163f cosmetic changes 2022-02-16 23:39:11 +01:00
tth
8122bf1932 moare doc 2022-02-16 20:07:26 +01:00
12 changed files with 151 additions and 42 deletions

View File

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

View File

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

View File

@ -5,7 +5,7 @@ C'est quoi ?
Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné
dans lequel se déplacent des **bloubs**, lesquels sont
des sortes de particule
munie de certaines propriétés.
munie de certaines propriétés (age, grosseur, vitesses, etc...).
Lesquelles évoluent en fonction du temps.
## Description d'un bloub
@ -18,17 +18,60 @@ Lesquelles évoluent en fonction du temps.
real :: px, py, pz
real :: vx, vy, vz
real :: radius
integer :: seq
integer :: age
end type t_bloubs
```
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 ?
Pas trop mal pour un premier jet. Il suffit de lire
le script `runme.sh` pour avoir une idée de l'enchainement
des opérations.
des opérations. Lequel enchainement est décrit plus bas.
## 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

View File

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

19
BloubWorld/essai.f90 Normal file
View File

@ -0,0 +1,19 @@
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
exit
endif
print *, bloub%px, bloub%py, bloub%pz, bloub%radius
print *, bloub%px, bloub%py, bloub%pz, bloub%radius, bloub%age
compte = compte + 1
enddo

View File

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

View File

@ -70,6 +70,11 @@ program mergebloubs
do ! infinite loop
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 (unit=inu, iostat=errcode) bloub
if (0 .ne. errcode) then
@ -89,9 +94,7 @@ program mergebloubs
! call display_bloub(les_bloubs(i), "DEAD ? WTF ?")
cycle
endif
rval = distance_of_bloubs(les_bloubs(i), bloub)
if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then
print *, "contact : ", i, idx, rval
call merge_two_bloubs(les_bloubs(i), bloub, newbloub)
@ -99,16 +102,21 @@ program mergebloubs
nbr_merge = nbr_merge + 1
merged = .TRUE.
endif
enddo
if (merged) then
! put new bloub in the list
les_bloubs(idx) = newbloub
bloub = newbloub
else
! put old bloub in the list
les_bloubs(idx) = bloub
endif
write(outu, iostat=errcode) bloub ! no error control ?
if (0 .ne. errcode) then
STOP " : WRITE ERROR TO " // trim(outfile)
endif
idx = idx + 1
! print *, "idx = ", idx

View File

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

View File

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

View File

@ -21,10 +21,7 @@ global_settings {
object {
Bloubs
texture {
pigment { color Gray60 }
finish { phong 0.58 specular 0.45 }
}
finish { phong 0.33 specular 0.95 }
}
plane {
@ -39,7 +36,7 @@ plane {
#declare BH = 5; // H = taille en horizontal
#declare BV = 5; // V = taille en vertical
#declare BR = 0.028;
#declare BR = 0.035;
#declare Une_Borne = object
{
@ -49,21 +46,24 @@ merge {
}
}
#declare Cadre_Haut = object
#declare Un_Cadre = object
{
merge {
cylinder { <-BH, 0, -BH>, <-BH, 0, BH>, BR }
#local Ruc = BR * 0.78;
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>, Ruc }
}
pigment { color Gray50 }
pigment { color Gray40 }
}
#declare Les_Bornes = object
{
union {
object { Cadre_Haut translate y*(BV-0.05) }
#local E = 0.02;
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 Green } }
@ -75,19 +75,41 @@ union {
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 { <11, 19, 9> color Gray60 }
#declare HCAM = 5 + (11 * NormClock);
#declare XCAM = 8 -( NormClock*3 );
#declare YCAM = 5 + (11 * NormClock);
#fopen LC "log.camera" append
#write (LC, clock, " ", NormClock, " ", HCAM, "\n")
#write (LC, clock, " ", NormClock, " ", YCAM, "\n")
#fclose LC
camera {
location <7, HCAM, -16>
location <XCAM, YCAM, -16>
look_at <0, 1, 0>
right x*image_width/image_height
angle 50
angle 48
}

View File

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