Compare commits
3 Commits
2b7012667a
...
60dac4d948
Author | SHA1 | Date | |
---|---|---|---|
|
60dac4d948 | ||
|
bf487c389c | ||
|
34da09281e |
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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 ?
|
||||
|
@ -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]'
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -29,20 +29,23 @@ object {
|
||||
finish { phong 0.57 specular 0.57 }
|
||||
}
|
||||
|
||||
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> }
|
||||
finish { phong 0.18 metallic 0.25 reflection 0.35 }
|
||||
}
|
||||
#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.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);
|
||||
|
Loading…
Reference in New Issue
Block a user