Compare commits

...

3 Commits

Author SHA1 Message Date
tTh
60dac4d948 pimping the bloubworld 2024-01-25 21:44:49 +01:00
tTh
bf487c389c renaming a func 2024-01-25 19:13:45 +01:00
tTh
34da09281e bloubworld: better doc 2024-01-25 19:05:23 +01:00
9 changed files with 86 additions and 76 deletions

View File

@ -7,36 +7,15 @@ dans lequel se déplacent des **bloubs**, lesquels sont
des sortes de particule
munie de certaines propriétés (age, grosseur, vitesses, etc...).
Lesquelles valeurs peuvent évoluer en fonction du temps.
Tout est expliqué dans ce [document](doc/what-is-a-bloub.md).
## Description d'un bloub
Attention cette description n'est qu'un exemple, mais les points
essentiels de la première étape sont là.
Les caractériques dynamiques : position et vélocités.
Coté physique : l'age en bloubcycle (avec un maximum), la taille,
un petit nom, et un état (coucou la FSM).
```
type t_bloubs
character(8) :: nick
logical :: alive
integer :: state
integer :: num ! ???
real :: px, py, pz
real :: vx, vy, vz
real :: radius
integer :: age, agemax
end type t_bloubs
```
C'est (preseque) simple, en fait.
la structure d'un bloub est (presque) simple, en fait.
Le plus compliqué, c'est de savoir quoi faire de ce fatras
de *bigdata*.
On peut fabriquer des gazillions de bloubs, 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,
rebondissantes.
Chaque choc va un peu les user, et au bout d'un moment,
ils vont mourir. C'est comme ça, c'est la vie des bloubs.
## Comment ça fonctionne ?
@ -45,8 +24,6 @@ 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. 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.
@ -55,11 +32,16 @@ Ces opérations agissent sur des fichiers de type `.blbs` 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.
## Les logiciels
### genbloubs
Fabrication d'une population de bloubs plus ou moins aléatoires.
Deux paramètres : le nom du fichier et le nombre de bloubs.
Deux paramètres : le nom du fichier (extention `.blbs`)
et le nombre de bloubs désirés.
Les règles de génération *devraient* être paramétrables.
[source](genbloubs.f90)
### movebloubs
@ -67,9 +49,9 @@ 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.
[source](movebloubs.f90)
Seul problème, il n'a pas de notion directe du temps, parce qu'il est
juste de passage dans un pipeline.
### exportbloubs
@ -77,13 +59,16 @@ 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.
**Le format de sortie est susceptible de changer sans préavis.**
Bon, pour le moment, dans les formats il n'y a que POVray,
mais Gnuplot et/ou Rdata arriveront bien un de ces jours.[source](exportbloubs.f90)
Bon, pour le moment, il n'y a que POVray, mais Gnuplot arrivera en second.
### mergebloubs
Alors, celui-ci, il n'est pas vraiment au point. Il faut tout ré-écrire
et faire gaffe à l'explosion quadratique.
[source](mergebloubs.f90)
## TODO

View File

@ -17,6 +17,7 @@ module bloubspace
real :: vx, vy, vz
real :: radius
integer :: age, agemax
integer :: red, green, blue
end type t_bloubs
type t_boundingbox
@ -37,7 +38,7 @@ module bloubspace
integer :: fd, errcode
character(200) :: message
print *, "try to load ", infile
print *, "try to load ", infile, " name ", name
! put some default values
where%id = "default"
@ -68,7 +69,7 @@ module bloubspace
! ----------------------------------------------------------------
subroutine random_pv (blb)
subroutine make_a_random_bloub(blb)
type(t_bloubs), intent (out) :: blb
blb%px = 3.57 * (rand() - 0.50)

View File

@ -2,14 +2,24 @@
## Philosophie
Bonne question, mais nous n'avons pas le temps, point suivant ?
Bonne question, mais nous n'avons pas le temps, point
suivant ? En fait, si, il est tard, mais j'ai envie de
raconter des conneries.
En fait, si, il est tard, mais j'ai envie de raconter des
conneries.
Un bloub est une entité mathématique qui vit
dans un espace cartésien abstrait, bien que normé.
Il peut aussi être borné, soit en mode "boite", soit
en mode "tore". La notion de champ de gravité est
ignoré, parce qu'un bloub se moque d'avoir une masse.
Par contre les bloubs peuvent interagir entre eux
de divers manières : rebond (genre billard), échange
de données, fusion volumique...
## Technique
Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_
Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_,
c'est à dire complètement différente de l'état actuel
du logiciel.
```
type t_bloubs
@ -23,17 +33,28 @@ Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_
end type t_bloubs
```
Certains champs sont assez explicites, comme le nick, la position
dans l'espace, le rayon (pour nous, un bloub est
une entité abstraite assimilable à une bubulle)
ou la vitesse sur les trois axes.
D'autres, comme `alive`, sont
plus délicates à expliquer, sauf si l'on considère que les
bloubs sont zombifiables.
Certains champs sont assez explicites, comme le *nick*,
la position dans l'espace, le rayon (pour nous, un bloub est
une entité abstraite assimilable à une bubulle) ou la vitesse
sur les trois directions de l'espace bloubeux.
D'autres, comme `alive`, sont plus délicates à expliquer,
sauf si l'on considère que les bloubs sont zombifiables.
D'autres, comme l'age, sont bien plus sujettes à de diverses
interprétations. doit-on incrémenter l'age à chaque tick d'horloge
ou à chaque évènement discret ? Et à quel age un bloub devient-il
trop vieux, à quel age va-t-il mourir ?
## Et pour la suite ?
Au fil du temps, le bloub évolue et se complexifie.
La prochaine itération sera dotée d'un attribut de couleur et
d'amusantes fonctions pour mixer ces couleurs si deux bloubs
se trouvent à fusionner.
On peut aussi envisager de les munir d'un spin non entier
dans le but assumé d'augmenter la complexité des rencontres
interbloubs.

View File

@ -39,7 +39,7 @@ program exportbloubs
endif
enddo
write(0, '(1X, I8, A)') compte, " bloubs exported"
write(0, '(1X, I0, A)') compte, " bloubs exported"
close(idu)

View File

@ -33,7 +33,7 @@ program genbloubs
bloub%nick = 'noname '
bloub%num = i + 41
call random_pv(bloub)
call make_a_random_bloub(bloub)
bloub%radius = 0.035 + (0.03*rand())
write(idu) bloub ! no error control ?

View File

@ -54,7 +54,7 @@ program mergebloubs
enddo
call spit_bloubs_to_file (outfile, bloubs, nbgot)
print *, contacts, "contacts pour ", nbgot, "bloubs"
! print *, contacts, "contacts pour ", nbgot, "bloubs"
! STOP 'mergebloubs [done]'

View File

@ -83,28 +83,28 @@ program movebloubs
enddo ! end of main loop
write(0, '(I5,1X,A)') compteur, "bloubs processed"
write(0, '(1X,I0,1X,A)') compteur, "bloubs processed"
! ok, we have read all the bloubs in the input file
! insert some fancy conditional here
if (compteur .LT. 200) then
call add_more_bloubs(outu, 4, 0.1056)
call add_more_bloubs(outu, 4, 0.026)
endif
! insert some very fancy conditional here
if (compteur .LT. 800) then
rnd = rand()
write (0, '(A,1X,F9.6)') "try to add bloubs, rnd is", rnd
! write (0, '(A,1X,F9.6)') "try to add bloubs, rnd is", rnd
if (rnd .LT. 0.0604) then
call add_more_bloubs(outu, 11, 0.099)
call add_more_bloubs(outu, 11, 0.019)
endif
endif
close(inu) ; close(outu)
if (killed .GT. 0) then
write (0, '(I5,A)') killed, " bloubs killed"
write (0, '(1X,I0,A)') killed, " bloubs killed"
endif
bx = bx / dble(compteur)
@ -127,8 +127,8 @@ contains
do foo=1, count
bloub%nick = 'newbie '
call random_pv(bloub)
bloub%radius = rayon + (0.15*rand())
call make_a_random_bloub(bloub)
bloub%radius = rayon + (0.05*rand())
bloub%age = 1
bloub%alive = .TRUE.
bloub%num = mod(irand(), 42)

View File

@ -7,16 +7,16 @@
INCFILE="WS/bloubs.inc"
TMPPNG="/dev/shm/bloubs7.png"
POVOPT="+Q9 +a -v -d -W1600 -H1200 -WT2"
POVOPT="+Q9 -a -v -d -W1600 -H1200 -WT2"
DDIR="frames/a"
LOGERR="log.error"
TXTCOLOR="GreenYellow"
TXTCOLOR="#db7000"
# --- put the work file in ramdisk
BLBS_IN="/dev/shm/in.blbs"
BLBS_OUT="/dev/shm/out.blbs"
NBIMG=3000
NBIMG=120
make all
err=$?
@ -31,7 +31,7 @@ printf "\n#declare NbImg = %d;\n" $NBIMG > WS/nbimg.inc
# first, we have to make a seminal buch of bloubs
# --> this function need to be parametrizable
#
./genbloubs ${BLBS_IN} 3
./genbloubs ${BLBS_IN} 50
for idx in $(seq 0 $((NBIMG-1)) )
do
@ -43,11 +43,11 @@ do
povray -Iscene.pov -K${idx} -O${TMPPNG} ${POVOPT} 2> $LOGERR
if [ 0 -ne $? ] ; then
tail -15 $LOGERR
sleep 30
sleep 90
fi
td=$(date +'%F %R:%S')
hi=$(printf "#%05d" $idx)
td=$(date -u +'%F %R:%S' | tr '01' 'ol')
hi=$(printf "#%05d" $idx | tr '01' 'ol')
count=$(tail -1 "WS/log.nb_bloubs")
PNG=$(printf "%s/%05d.png" ${DDIR} $idx)

View File

@ -29,20 +29,23 @@ object {
finish { phong 0.57 specular 0.57 }
}
object {
union {
#declare La_Boite = object
{
union {
plane { <1, 0, 0>, -37 }
plane { <1, 0, 0>, 37 }
plane { <0, 1, 0>, -27 }
plane { <0, 1, 0>, 27 }
plane { <0, 0, 1>, 69 }
texture {
pigment { color srgb <0.125, 0.144, 0.111> }
pigment { color srgb <0.225, 0.244, 0.211> }
finish { phong 0.18 metallic 0.25 reflection 0.35 }
}
}
}
}
plane { y, 0 pigment { color White } translate -4.20*y}
// object { cylinder { <0, 0, 0>, <10, 0, 0>, 0.05 pigment { color Cyan } } }
@ -56,7 +59,7 @@ object {
{
merge {
cylinder { <0, BV, 0>, <0, -BV, 0>, BR }
cylinder { <0, 0.014, 0>, <0, -0.014, 0>, BR*4 }
cylinder { <0, 0.018, 0>, <0, -0.018, 0>, BR*3 }
}
}
@ -109,8 +112,8 @@ union {
}
// ----------------------------------------------------------
light_source { <19, -12+NormClock, -17> color Gray80 }
light_source { <11, 14-NormClock, 9> color Gray60 }
light_source { <19, 12+NormClock, -17> color Gray80 }
light_source { <11, 10-NormClock, -29> color Gray60 }
#declare XCAM = 8 - ( 15 * NormClock);
#declare YCAM = -1.1 + (0.95 * NormClock);