EN réponse au défi ironique, voici la dernière version (dynamique celle-ci) du programme qui a fabriqué les images.
En effet la vidéo est "STATIQUE" : le programme calculait UNE FOIS l'accélération centripète reçue par CHAQUE étoile (en calculant GM X/R^3 reliant CHAQUE ETOILE à chacune des autres étoiles....)
Cette nouvelle version part d"un disque formé d"étoiles et ayant un rayon Q (entier => le nombre d'étoiles sur un rayon.
Dans la vidéo.... l'accélération centripète était convertie en vitesse tangentielle par la formule v^2= acc * rayon de l'étoile.
MAIS la "vitesse de révolution" RESTAIT - ainsi qu'il est dit dans le commentaire CONSTANTE.
Le programme qui suit RECALCULE la TOTALITE des NOUVELLES ACCELERATIONS après la modification des positions respectives.
Il s'agit d'une pseudo galaxie elliptique dont je testais la possibilité d'y VOIR SPONTANEMENT APPARAITRE DES BRAS SPIRAUX. (il semble que cela puisse le faire....!!!!!
Mais il me faudrait PLUS DE TEMPS !!!
+++++++++++++++++++++++++++
Le coeur PHYSIQUE NEWTONIEN du programme se trouve dans cette BOUCLE
+++++
FOR NUM_ETOILE_EMETTRICE=0 TO nbre_dans_groupe_0-1
IF NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU THEN' OR JJ<>J THEN
' IF TABETvitX (NUM_ETOILE_EMETTRICE,JJ)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
ECARTX= TCOORD_X(NETOILESDANSTABLEAU)-TCOORD_X(NUM_ETOILE_EMETTRICE)
ECARTy= TCOORD_Y(NETOILESDANSTABLEAU)-TCOORD_Y(NUM_ETOILE_EMETTRICE)
TVIT_X(NETOILESDANSTABLEAU)-=coef* ECARTX/(ECARTX^2+ECARTY^2)^1.5*pastemps
TVIT_Y(NETOILESDANSTABLEAU)-=coef* ECARTY/(ECARTX^2+ECARTY^2)^1.5*pastemps
END IF
NEXT NUM_ETOILE_EMETTRICE
+++++
Toutes les étoiles ont des coordonnées et des vitesses... les pointeurs NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU
utilisent le même tableau...
Il s'agit simplement dans le test de vérifeir que l'étoile émettrice ne vienne pas ATTIRER ELLE-MEME...
On calcule l'écart X et Y
Et on les insère dans la formule newtonienne ;
TVIT_X(NETOILESDANSTABLEAU)-=coef* ECARTX/(ECARTX^2+ECARTY^2)^1.5*pastemps
le coef évite de recalculer G fois Masse à chaque fois et ... si l'on souhaite , pouvoir le multiplier par DEUX pour avoir des masses égales deux soleil....
JE N'AI PAS NETTOYE LES BRANCHES MORTES NI LES COMMENTAIRES ....
'8888o8888888888888888888888888888888888888888888888888888888888888
' TITRE DU PROGRAMME
'pour
'gravuNIQUE COUL ECIN B06 Q 30
'le résultat n"est pas très concluant .... la révolution diffère la dislocation
'mais ne l'empêche pas (suffisamment ?)
'Il est vrai que 2828 étoiles et 200 E9 étoiles ne stabilisent pas AUTANT !!!
'Je vais essayer maintenant si l'effet AAR pourrait AUGMENTER la stabilité
'88888888888888888888888888888888888888888888888888888888888888888
DECLARE SUB faitarc ()
DECLARE SUB dessine_point ()
DECLARE SUB dessine_point_enroule ()
'DECLARE SUB efface_point ()
DECLARE SUB initgen ()
declare SUB MODIFIE_les_vitesses ()
DECLARE SUB initialise_les_vit_revo_G0 ()
DECLARE SUB initialise_les_vit_revo_G1 ()
const largecran=800,hautecran=600
CONST PI=3.1415926535897932384626433832795
const vitC=299792458
const vitS=5000000'150000000'5000000' TROP POUR Q20 20000000 TROP POUR Q5 30000000
DIM SHARED AS INTEGER I,J,JJ
DIM SHARED AS INTEGER COULEURMAXI=256,ncouleuretoile
DIM SHARED AS INTEGER STOCK_POINTS_ARC (COULEURMAXI)
DIM SHARED AS INTEGER Q
Q=50'20'5 '20
DIM SHARED AS INTEGER NMAXETOILES,spe
NMAXETOILES=2*4*Q^2
DIM SHARED AS INTEGER NETOILESDANSTABLEAU,NUM_ETOILE_EMETTRICE
DIM SHARED AS INTEGER groupelu=0,autregroupe=1
DIM SHARED AS DOUBLE TCOORD_X( NMAXETOILES),TCOORD_Y( NMAXETOILES),delai_b
DIM SHARED AS DOUBLE TRAJET_SIGNALX ,TRAJET_SIGNALY
DIM SHARED AS DOUBLE TVIT_X( NMAXETOILES),TVIT_Y( NMAXETOILES)
DIM SHARED AS DOUBLE TCOORD_X_surecran( NMAXETOILES),TCOORD_Y_surecran( NMAXETOILES)
'DIM SHARED AS UBYTE TABLEAU ( I,J )
'DIM SHARED AS DOUBLE TABETX(4*Q,2*Q),TABETY(4*Q,2*Q),TABETvitX (4*Q,2*Q),TABETvitY (4*Q,2*Q)
'DIM SHARED AS DOUBLE TABETX2(cases2,cases2),TABETY2(cases2,cases2),TABETvitX2 (cases2,cases2),TABETvitY2 (cases2,cases2)
DIM SHARED AS DOUBLE Rayon_galax,Rayon_galax_VL,Taille_case_metres,echelle,gmso,coef,distance_entre_les_galax
DIM SHARED AS DOUBLE vitx1init,vity1init,vitx2init,vity2init
DIM SHARED AS DOUBLE PROPORTION,nbre_dans_groupe_0,nbre_dans_groupe_1,n
DIM SHARED AS DOUBLE totvitx,totvity,vitmoyennex,vitmoyenney,vitmoyenne
DIM SHARED AS DOUBLE totvitx1,totvity1
DIM SHARED AS DOUBLE totvitx2,totvity2
DIM SHARED AS DOUBLE pastemps,ecartx,ecarty,cycle,heure
DIM SHARED AS DOUBLE xeff,yeff
DIM SHARED AS string fichier,dossier,fichierBASE
DIM SHARED AS DOUBLE distessemax1
'DIM SHARED AS DOUBLE rayoncases
'Q=2*Q/2
SCREEN 19,32 '(19 indique un écran de 800 sur 600)
'DIMFICH = il va être donné par le chargement 300 '256*32
'88888888888888888888888888888888888888888888888888888888888888888
PRINT "DEBUT DU PROGRAMME"
SLEEP
'Q=2*Q/2
'nbre_dans_groupe_0=pi*(Q)^2
Rayon_galax_VL=1.41910957088712000000E20
Taille_case_metres=Rayon_galax_VL/int(SQR(200E9/pi))
Rayon_galax=Q*Taille_case_metres
distance_entre_les_galax=2.3*Rayon_galax
GMso=1.32712E+020
coef=GMso'/Taille_case_metres^2
pastemps=1e10 '1e9
PROPORTION=1/8*pi/4
print "initgen"
SLEEP
initgen ()
SLEEP
CLS
line (largecran/2-1,0)-(largecran/2-1,hautecran),&hFFFFFF
line (largecran/2,0)-(largecran/2,hautecran),&hFFFFFF
line (largecran/2+1,0)-(largecran/2+1,hautecran),&hFFFFFF
dossier="grav AAR COUL ECIN C 05 Q "+str(Q)'+"-"+str(Q1)
MKDIR dossier
fichierBASE="C:\__A QBASIC GLOBAL\_travaux 2012 06 juin\"+dossier
do until inkey$="f"
if INKEY$="p" then
do until inkey$=" "
loop
end if
heure +=pastemps
locate 1,1
print " "
locate 1,1
print using "heure #.###";heure/10^int(log (heure)/log (10));
print " e ";int(log (heure)/log (10))
totvitx=0
totvity=0
totvitx1=0
totvity1=0
totvitx2=0
totvity2=0
cycle+=1
print "cycle ";cycle
' sleep
'PRINT "MODIFIE_les_vitesses () "
MODIFIE_les_vitesses ()
'SLEEP
locate 6,1
print n,totvitx/n/1000, totvity/n/1000
print nbre_dans_groupe_0,totvitx1/nbre_dans_groupe_0/1000, totvity1/nbre_dans_groupe_0/1000
print nbre_dans_groupe_1,totvitx2/nbre_dans_groupe_1/1000, totvity2/nbre_dans_groupe_1/1000
FICHIER= fichierBASE+"\"+dossier+" pastemps 1E"+str(int(0.1+log(pastemps)/log(10)))+" "
if cycle<10 then
BSAVE fichier+"0000"+str(cycle)+" .bmp",0
else
if cycle<100 then
BSAVE fichier+"000"+str(cycle)+" .bmp",0
else
if cycle<1000 then
BSAVE fichier+"00"+str(cycle)+" .bmp",0
else
if cycle<10000 then
BSAVE fichier+"0"+str(cycle)+" .bmp",0
ELSE
BSAVE fichier+str(cycle)+" .bmp",0
end if
end if
end if
end if
'SLEEP
loop
PRINT "FIN DU PROGRAMME"
SLEEP
END
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'FIN DU PROGRAMME PRINCIPAL
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'DEBUT DES SUBROUTINES
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB dessine_point ()
dim as double xecran,yecran,facthaut,marge=30'350
pset ( TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),0'&hFF*256^groupelu '&hFF*256^groupelu '1*cycle+
xecran=marge+(Rayon_galax+TCOORD_X(NETOILESDANSTABLEAU))*echelle
yecran=(TCOORD_Y(NETOILESDANSTABLEAU)+Rayon_galax-vity1init*heure)*echelle
TCOORD_X_surecran( NETOILESDANSTABLEAU)= xecran
TCOORD_Y_surecran( NETOILESDANSTABLEAU)= hautecran-100- yecran
IF groupelu=0 and xecran< largecran/2-2 THEN
pset (TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),STOCK_POINTS_ARC (nCOULEURetoile)'&hFF77FF'0'&hFF*256^groupelu '1*cycle+
ELSE
IF groupelu=1 and xecran> largecran/2+2 THEN
pset (TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),STOCK_POINTS_ARC (nCOULEURetoile)'&h7700FF'0'&hFF*256^groupelu '1*cycle+
END IF
END IF
END SUB
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
''+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB dessine_point_enroule ()
dim as double xecran,yecran,facthaut,marge=30'350
'2*Q
' cls
' xecran=TCOORD_X_surecran( NETOILESDANSTABLEAU)
' yecran= TCOORD_Y_surecran( NETOILESDANSTABLEAU)
' facthaut=int (yecran/hautecran)
' LOCATE 6,1
'for spe=0 to 2*Q^2
'print spe;TCOORD_X_surecran( spe);TCOORD_Y_surecran( spe);
'next
'sleep
' print "NETOILESDANSTABLEAU; ";NETOILESDANSTABLEAU
' sleep
' print "TCOORD_X_surecran( NETOILESDANSTABLEAU)";TCOORD_X_surecran( NETOILESDANSTABLEAU)
' sleep
' print "TCOORD_Y_surecran( NETOILESDANSTABLEAU)";TCOORD_Y_surecran( NETOILESDANSTABLEAU)
' sleep
pset ( TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),0'&hFF*256^groupelu '&hFF*256^groupelu '1*cycle+
' pset (1+xecran,1+hautecran-( yecran -facthaut*hautecran)),0'&hFF*256^groupelu '&hFF*256^groupelu '1*cycle+
' pset (xecran,1+hautecran-( yecran -facthaut*hautecran)),0'&hFF*256^groupelu '&hFF*256^groupelu '1*cycle+
' pset (1+xecran,hautecran-( yecran -facthaut*hautecran)),0'&hFF*256^groupelu '&hFF*256^groupelu '1*cycle+
xecran=marge+(Rayon_galax+TCOORD_X(NETOILESDANSTABLEAU))*echelle
yecran=(TCOORD_Y(NETOILESDANSTABLEAU)+Rayon_galax-vity1init*heure)*echelle
facthaut=int (yecran/hautecran)
' print "xecran;yecran;facthaut;";xecran;yecran;facthaut
' sleep
TCOORD_X_surecran( NETOILESDANSTABLEAU)= xecran
'print "hautecran-60-( yecran -facthaut*hautecran)"; hautecran-60-( yecran -facthaut*hautecran)
' sleep
' print "NETOILESDANSTABLEAU";NETOILESDANSTABLEAU
' sleep
' print "TCOORD_Y_surecran( NETOILESDANSTABLEAU)";TCOORD_Y_surecran( NETOILESDANSTABLEAU)
' sleep
TCOORD_Y_surecran( NETOILESDANSTABLEAU)= hautecran-100-( yecran -facthaut*hautecran)
'
' print "TCOORD_X_surecran( NETOILESDANSTABLEAU) ";TCOORD_X_surecran( NETOILESDANSTABLEAU), TCOORD_Y_surecran( NETOILESDANSTABLEAU)
' sleep
'
IF groupelu=0 THEN
pset (TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),&hFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (1+xecran,hautecran-( yecran -facthaut*hautecran)),&hFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (1+xecran,1+hautecran-( yecran -facthaut*hautecran)),&hFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (xecran,1+hautecran-( yecran -facthaut*hautecran)),&hFFFF'0'&hFF*256^groupelu '1*cycle+
ELSE
pset (TCOORD_X_surecran( NETOILESDANSTABLEAU),TCOORD_Y_surecran( NETOILESDANSTABLEAU)),&hFFFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (1+xecran,hautecran-( yecran -facthaut*hautecran)),&hFFFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (xecran,1+hautecran-( yecran -facthaut*hautecran)),&hFFFFFF'0'&hFF*256^groupelu '1*cycle+
' pset (1+xecran,1+hautecran-( yecran -facthaut*hautecran)),&hFFFFFF'0'&hFF*256^groupelu '1*cycle+
END IF
' print "TCOORD_X_surecran( NETOILESDANSTABLEAU)";TCOORD_X_surecran( NETOILESDANSTABLEAU)
' sleep
' print "TCOORD_Y_surecran( NETOILESDANSTABLEAU)";TCOORD_Y_surecran( NETOILESDANSTABLEAU)
' sleep
' for spe=0 to 2*Q^2
'print spe;TCOORD_X_surecran( spe);TCOORD_Y_surecran( spe);
'next
'sleep
' print "sortie "
'sleep
END SUB
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
''+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'SUB efface_point ()
' dim as double xecran,yecran,facthaut
' xecran=TCOORD_X(NETOILESDANSTABLEAU)*echelle
' yecran=TCOORD_Y(NETOILESDANSTABLEAU)*echelle
' facthaut=int (yecran/hautecran)
' pset (xecran,hautecran-( yecran -facthaut*hautecran)),0'&hFF*256^groupelu '1*cycle+
'END SUB
'
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SUB initgen ()
'fffDIM SHARED AS DOUBLE Q
DIM AS DOUBLE X_en_metres,Y_en_metres
faitarc ()
echelle=350/(Taille_case_metres*2*Q) '60
vitx1init=0'20000
vity1init=VITS'5000000'20000
vitx2init=0'-2200
vity2init=VITS'5000000'2'20000
'rem 4*Q=40 2*Q=20
nbre_dans_groupe_0=0
groupelu=0
NETOILESDANSTABLEAU=0
FOR I=0 TO 2*Q-1 'de 0 à 19 4*Q/2=20 'rem le rayon = 10=4*Q/4
X_en_metres=Taille_case_metres*(I-Q+0.5)
FOR J=0 TO 2*Q-1 'de 0 à 19
Y_en_metres=Taille_case_metres*(J-Q+0.5)
IF X_en_metres^2+Y_en_metres^2<rayon_galax^2 THEN
' PRINT "m ";X_en_metres,Y_en_metres
' sleep
TCOORD_X(NETOILESDANSTABLEAU)= X_en_metres
TCOORD_Y(NETOILESDANSTABLEAU)= Y_en_metres
dessine_point ()
TVIT_X(NETOILESDANSTABLEAU)=vitx1init
TVIT_Y(NETOILESDANSTABLEAU)=vity1init
totvitx1+= TVIT_X(NETOILESDANSTABLEAU)
totvity1+= TVIT_Y(NETOILESDANSTABLEAU)
nbre_dans_groupe_0+=1
NETOILESDANSTABLEAU+=1
END IF
NEXT J
NEXT I
'swap groupelu,autregroupe
groupelu=1
nbre_dans_groupe_1=0
'distance_entre_les_galax
FOR I=0 TO 2*Q-1 'de 0 à 19 4*Q/2=20 'rem le rayon = 10=4*Q/4
X_en_metres=Taille_case_metres*(I-Q+0.5)+distance_entre_les_galax
FOR J=0 TO 2*Q-1 'de 0 à 19
Y_en_metres=Taille_case_metres*(J-Q+0.5)
IF (X_en_metres-distance_entre_les_galax)^2+Y_en_metres^2<rayon_galax^2 THEN
TCOORD_X(NETOILESDANSTABLEAU)= X_en_metres
TCOORD_Y(NETOILESDANSTABLEAU)= Y_en_metres
dessine_point ()
TVIT_X(NETOILESDANSTABLEAU)=vitx2init
TVIT_Y(NETOILESDANSTABLEAU)=vity2init
totvitx2+= TVIT_X(NETOILESDANSTABLEAU)
totvity2+= TVIT_Y(NETOILESDANSTABLEAU)
nbre_dans_groupe_1+=1
NETOILESDANSTABLEAU+=1
END IF
NEXT J
NEXT I
'swap groupelu,autregroupe
n=nbre_dans_groupe_0+nbre_dans_groupe_1
locate 12,1
print "nbre_dans_groupe_0 ";nbre_dans_groupe_0,"totvitx1 ";totvitx1;"totvitx1/nbre_dans_groupe_0/1000 ";totvitx1/nbre_dans_groupe_0/1000
print "nbre_dans_groupe_0 ";nbre_dans_groupe_0,"totvity1 ";totvity1;"totvity1/nbre_dans_groupe_0/1000 ";totvity1/nbre_dans_groupe_0/1000
print "nbre_dans_groupe_1 ";nbre_dans_groupe_1,"totvitx2 ";totvitx2;"totvitx2/nbre_dans_groupe_1/1000 ";totvitx2/nbre_dans_groupe_1/1000
print "nbre_dans_groupe_1 ";nbre_dans_groupe_1,"totvity1 ";totvity2;"totvity2/nbre_dans_groupe_1/1000 ";totvity2/nbre_dans_groupe_1/1000
SLEEP
print "initialise_les_vit_revo ()"
SLEEP
initialise_les_vit_revo_G0 ()
initialise_les_vit_revo_G1 ()
SLEEP
END SUB
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
SUB MODIFIE_les_vitesses ()
FOR NETOILESDANSTABLEAU=0 to nbre_dans_groupe_0-1
groupelu=0 'int (NETOILESDANSTABLEAU/nbre_dans_groupe_0)
FOR NUM_ETOILE_EMETTRICE=0 TO nbre_dans_groupe_0-1
IF NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU THEN' OR JJ<>J THEN
' IF TABETvitX (NUM_ETOILE_EMETTRICE,JJ)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
ECARTX= TCOORD_X(NETOILESDANSTABLEAU)-TCOORD_X(NUM_ETOILE_EMETTRICE)
ECARTy= TCOORD_Y(NETOILESDANSTABLEAU)-TCOORD_Y(NUM_ETOILE_EMETTRICE)
TVIT_X(NETOILESDANSTABLEAU)-=coef* ECARTX/(ECARTX^2+ECARTY^2)^1.5*pastemps
TVIT_Y(NETOILESDANSTABLEAU)-=coef* ECARTY/(ECARTX^2+ECARTY^2)^1.5*pastemps
END IF
NEXT NUM_ETOILE_EMETTRICE
NEXT NETOILESDANSTABLEAU
'il faut séparer le calcul de la nouvelle position pour que les émetteurs RESTENT en PLACE
FOR NETOILESDANSTABLEAU=nbre_dans_groupe_0 to n-1
groupelu=1'int (NETOILESDANSTABLEAU/nbre_dans_groupe_0)
FOR NUM_ETOILE_EMETTRICE=nbre_dans_groupe_0 TO n-1
IF NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU THEN' OR JJ<>J THEN
' IF TABETvitX (NUM_ETOILE_EMETTRICE,JJ)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
ECARTX= TCOORD_X(NETOILESDANSTABLEAU)-TCOORD_X(NUM_ETOILE_EMETTRICE)
ECARTy= TCOORD_Y(NETOILESDANSTABLEAU)-TCOORD_Y(NUM_ETOILE_EMETTRICE)
DELAI_B=(TVIT_X(NUM_ETOILE_EMETTRICE)*ECARTX+TVIT_Y(NUM_ETOILE_EMETTRICE)*ECARTY +sqr(vitC^2*(ECARTX^2+ECARTY^2)-(TVIT_X(NUM_ETOILE_EMETTRICE)*ECARTY-TVIT_Y(NUM_ETOILE_EMETTRICE)*ECARTX)^2))/(vitC^2-TVIT_X(NUM_ETOILE_EMETTRICE)^2-TVIT_Y(NUM_ETOILE_EMETTRICE)^2)
TRAJET_SIGNALX=ECARTX+TVIT_X(NUM_ETOILE_EMETTRICE)*DELAI_B
TRAJET_SIGNALY=ECARTY+TVIT_Y(NUM_ETOILE_EMETTRICE)*DELAI_B
TVIT_X(NETOILESDANSTABLEAU)-=coef* TRAJET_SIGNALX/(TRAJET_SIGNALX^2+TRAJET_SIGNALY^2)^1.5*pastemps
TVIT_Y(NETOILESDANSTABLEAU)-=coef* TRAJET_SIGNALY/(TRAJET_SIGNALX^2+TRAJET_SIGNALY^2)^1.5*pastemps
END IF
NEXT NUM_ETOILE_EMETTRICE
NEXT NETOILESDANSTABLEAU
'il faut séparer le calcul de la nouvelle position pour que les émetteurs RESTENT en PLACE
FOR NETOILESDANSTABLEAU=0 to n-1
groupelu=int (NETOILESDANSTABLEAU/nbre_dans_groupe_0)
TCOORD_X(NETOILESDANSTABLEAU)+=TVIT_X(NETOILESDANSTABLEAU)*pastemps
TCOORD_Y(NETOILESDANSTABLEAU)+=TVIT_Y(NETOILESDANSTABLEAU)*pastemps
totvitx+ = TVIT_X(NETOILESDANSTABLEAU)
totvity+= TVIT_Y(NETOILESDANSTABLEAU)
if groupelu=0 then
totvitx1+ = TVIT_X(NETOILESDANSTABLEAU)
totvity1+= TVIT_Y(NETOILESDANSTABLEAU)
NCOULEURETOILE =INT (sqr(TVIT_X(NETOILESDANSTABLEAU)^2+(TVIT_Y(NETOILESDANSTABLEAU)-vity1init)^2)/(distessemax1*1.2) *couleurmaxi)
IF NCOULEURETOILE >=couleurmaxi THEN NCOULEURETOILE=couleurmaxi-1
NCOULEURETOILE=255-NCOULEURETOILE
else
totvitx2+ = TVIT_X(NETOILESDANSTABLEAU)
totvity2+= TVIT_Y(NETOILESDANSTABLEAU)
NCOULEURETOILE =INT (sqr(TVIT_X(NETOILESDANSTABLEAU)^2+(TVIT_Y(NETOILESDANSTABLEAU)-vity2init)^2)/(distessemax1*1.2) *couleurmaxi)
IF NCOULEURETOILE >=couleurmaxi THEN NCOULEURETOILE=couleurmaxi-1
NCOULEURETOILE=255-NCOULEURETOILE
end if
dessine_point ()
NEXT NETOILESDANSTABLEAU
END SUB
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
SUB initialise_les_vit_revo_G0 ()
DIM AS DOUBLE TOTACCX,TOTACCY,acccentriX,acccentriY
DIM AS DOUBLE Xdansgalax,Ydansgalax,Rdansgalax,i_acc_centripete_ini,j_acc_centripete_ini
FOR NETOILESDANSTABLEAU=0 TO nbre_dans_groupe_0-1'4*Q/2-1
' FOR J=0 TO 2*Q-1
' locate 1,30
' print i,j
groupelu=0
' IF TVIT_X(NETOILESDANSTABLEAU)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
TOTACCX=0
TOTACCY=0
'on va scruter
FOR NUM_ETOILE_EMETTRICE=0 TO nbre_dans_groupe_0-1'4*Q-1
' FOR JJ=0 TO 2*Q-1
IF NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU THEN
' IF TABETvitX (NUM_ETOILE_EMETTRICE,JJ)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
ECARTX= TCOORD_X(NETOILESDANSTABLEAU)-TCOORD_X(NUM_ETOILE_EMETTRICE)
ECARTy= TCOORD_Y(NETOILESDANSTABLEAU)-TCOORD_Y(NUM_ETOILE_EMETTRICE)
TOTACCX-=coef* ECARTX/(ECARTX^2+ECARTY^2)^1.5
TOTACCy-=coef* ECARTY/(ECARTX^2+ECARTY^2)^1.5
END IF
NEXT NUM_ETOILE_EMETTRICE
Xdansgalax=TCOORD_X(NETOILESDANSTABLEAU)
Ydansgalax=TCOORD_Y(NETOILESDANSTABLEAU)
Rdansgalax=SQR(Xdansgalax^2+Ydansgalax^2)
i_acc_centripete_ini=-(TOTACCX* Xdansgalax+TOTACCy*Ydansgalax)/rdansgalax
j_acc_centripete_ini=-(TOTACCX* Ydansgalax-TOTACCy*Xdansgalax)/rdansgalax
TVIT_X(NETOILESDANSTABLEAU) -=SQR(i_acc_centripete_ini*Rdansgalax)*Ydansgalax/Rdansgalax
TVIT_Y(NETOILESDANSTABLEAU) +=SQR(i_acc_centripete_ini*Rdansgalax)*Xdansgalax/Rdansgalax
' locate 6,30
' PRINT TVIT_X(NETOILESDANSTABLEAU) , TVIT_Y(NETOILESDANSTABLEAU)
'
' sleep 32
if TVIT_X(NETOILESDANSTABLEAU)+(TVIT_Y(NETOILESDANSTABLEAU)-vity1init)^2>distessemax1^2 then
distessemax1 =sqr(TVIT_X(NETOILESDANSTABLEAU)^2+(TVIT_Y(NETOILESDANSTABLEAU)-vity1init)^2)
end if
LOCATE 30,1
PRINT TVIT_X(NETOILESDANSTABLEAU)/1000, TVIT_Y(NETOILESDANSTABLEAU)/1000
'SLEEP
NEXT NETOILESDANSTABLEAU
END SUB
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
SUB initialise_les_vit_revo_G1 ()
DIM AS DOUBLE TOTACCX,TOTACCY,acccentriX,acccentriY
DIM AS DOUBLE Xdansgalax,Ydansgalax,Rdansgalax,i_acc_centripete_ini,j_acc_centripete_ini
FOR NETOILESDANSTABLEAU=nbre_dans_groupe_0 TO n-1'4*Q/2-1
' FOR J=0 TO 2*Q-1
' locate 1,30
' print i,j
groupelu=1 'int (NETOILESDANSTABLEAU/nbre_dans_groupe_0)
' IF TVIT_X(NETOILESDANSTABLEAU)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
TOTACCX=0
TOTACCY=0
'on va scruter
'ATTENTION GROSSE BIOUILLE ICI TVIT_X(NUM_ETOILE_EMETTRICE-nbre_dans_groupe_0)
FOR NUM_ETOILE_EMETTRICE=nbre_dans_groupe_0 TO n-1'4*Q-1
' FOR JJ=0 TO 2*Q-1
' LOCATE 21,1
' PRINT "coor rec";TCOORD_X(NETOILESDANSTABLEAU)/Taille_case_metres, TCOORD_Y(NETOILESDANSTABLEAU)/Taille_case_metres;" "
IF NUM_ETOILE_EMETTRICE<>NETOILESDANSTABLEAU THEN
' IF TABETvitX (NUM_ETOILE_EMETTRICE,JJ)+TVIT_Y(NETOILESDANSTABLEAU)<>0 THEN 'sinon la case est vide
ECARTX= TCOORD_X(NETOILESDANSTABLEAU)-TCOORD_X(NUM_ETOILE_EMETTRICE)
ECARTy= TCOORD_Y(NETOILESDANSTABLEAU)-TCOORD_Y(NUM_ETOILE_EMETTRICE)
DELAI_B=(TVIT_X(NUM_ETOILE_EMETTRICE)*ECARTX+TVIT_Y(NUM_ETOILE_EMETTRICE)*ECARTY +sqr(vitC^2*(ECARTX^2+ECARTY^2)-(TVIT_X(NUM_ETOILE_EMETTRICE)*ECARTY-TVIT_Y(NUM_ETOILE_EMETTRICE)*ECARTX)^2))/(vitC^2-TVIT_X(NUM_ETOILE_EMETTRICE)^2-TVIT_Y(NUM_ETOILE_EMETTRICE)^2)
TRAJET_SIGNALX=ECARTX+TVIT_X(NUM_ETOILE_EMETTRICE-nbre_dans_groupe_0)*DELAI_B
TRAJET_SIGNALY=ECARTY+TVIT_Y(NUM_ETOILE_EMETTRICE-nbre_dans_groupe_0)*DELAI_B
TOTACCX-=coef* TRAJET_SIGNALX/(TRAJET_SIGNALX^2+TRAJET_SIGNALY^2)^1.5
TOTACCy-=coef* TRAJET_SIGNALY/(TRAJET_SIGNALX^2+TRAJET_SIGNALY^2)^1.5
' LOCATE 25,1
' PRINT NETOILESDANSTABLEAU,NUM_ETOILE_EMETTRICE, "ECARTX, ECARTY, DELAI_B , DELAI_B/PASTEMPS"
'
' PRINT ECARTX, ECARTY,DELAI_B ,DELAI_B/PASTEMPS
' LOCATE 22,1
'' PRINT "TRAJET_SIGNALX ,TRAJET_SIGNALY ,TOTACCX , TOTACCy"
'' PRINT TRAJET_SIGNALX ,TRAJET_SIGNALY ,TOTACCX , TOTACCy
' PRINT NETOILESDANSTABLEAU,NUM_ETOILE_EMETTRICE
' PRINT "coor em";TCOORD_X(NUM_ETOILE_EMETTRICE)/Taille_case_metres, TCOORD_Y(NUM_ETOILE_EMETTRICE)/Taille_case_metres;" "
' PRINT "traj signal";TRAJET_SIGNALX /Taille_case_metres,TRAJET_SIGNALY /Taille_case_metres;" "
' PRINT TOTACCX , TOTACCy;" "
' SLEEP
END IF
NEXT NUM_ETOILE_EMETTRICE
Xdansgalax=TCOORD_X(NETOILESDANSTABLEAU)-distance_entre_les_galax
Ydansgalax=TCOORD_Y(NETOILESDANSTABLEAU)
Rdansgalax=SQR(Xdansgalax^2+Ydansgalax^2)
' PRINT " Xdansgalax, Ydansgalax,Rdansgalax"
' PRINT Xdansgalax/Taille_case_metres, Ydansgalax/Taille_case_metres,Rdansgalax/Taille_case_metres;" "
' PRINT "accx";TOTACCX
' PRINT "acccy";TOTACCy
i_acc_centripete_ini=-(TOTACCX* Xdansgalax+TOTACCy*Ydansgalax)/rdansgalax
j_acc_centripete_ini=-(TOTACCX* Ydansgalax-TOTACCy*Xdansgalax)/rdansgalax
' PRINT "i_acc_centripete_ini",i_acc_centripete_ini
' PRINT "j_acc_centripete_ini",j_acc_centripete_ini
' sleep
IF i_acc_centripete_ini<0 THEN
PRINT "i_acc_centripete_ini<0",i_acc_centripete_ini
PRINT TOTACCX* Xdansgalax
PRINT TOTACCy*Ydansgalax
PRINT -(TOTACCX* Xdansgalax+TOTACCy*Ydansgalax)
PRINT -(TOTACCX* Xdansgalax+TOTACCy*Ydansgalax)/rdansgalax
SLEEP
i_acc_centripete_ini=0
TVIT_X(NETOILESDANSTABLEAU)=TVIT_X(NETOILESDANSTABLEAU-nbre_dans_groupe_0)' -=SQR(i_acc_centripete_ini*Rdansgalax)*Ydansgalax/Rdansgalax
TVIT_Y(NETOILESDANSTABLEAU) =TVIT_Y(NETOILESDANSTABLEAU-nbre_dans_groupe_0)'+=SQR(i_acc_centripete_ini*Rdansgalax)*Xdansgalax/Rdansgalax
ELSE
' IF j_acc_centripete_ini<0 THEN PRINT "j_acc_centripete_ini<0",j_acc_centripete_ini<0:SLEEP
TVIT_X(NETOILESDANSTABLEAU) -=SQR(i_acc_centripete_ini*Rdansgalax)*Ydansgalax/Rdansgalax
TVIT_Y(NETOILESDANSTABLEAU) +=SQR(i_acc_centripete_ini*Rdansgalax)*Xdansgalax/Rdansgalax
' PRINT TVIT_X(NETOILESDANSTABLEAU),TVIT_Y(NETOILESDANSTABLEAU)
END IF
IF i_acc_centripete_ini<0 THEN sleep
' locate 6,30
' PRINT TVIT_X(NETOILESDANSTABLEAU) , TVIT_Y(NETOILESDANSTABLEAU)
'
' sleep 32
if TVIT_X(NETOILESDANSTABLEAU)+(TVIT_Y(NETOILESDANSTABLEAU)-vity1init)^2>distessemax1^2 then
distessemax1 =sqr(TVIT_X(NETOILESDANSTABLEAU)^2+(TVIT_Y(NETOILESDANSTABLEAU)-vity1init)^2)
end if
'LOCATE 33,1
'PRINT TVIT_X(NETOILESDANSTABLEAU)/1000, TVIT_Y(NETOILESDANSTABLEAU)/1000
''SLEEP
NEXT NETOILESDANSTABLEAU
END SUB
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà
SUB faitarc ()
DIM AS INTEGER LARGIMAGE_ARC=600,HAUTIMAGE_ARC=256,locLIGNE,locCOULEUR
cls
Bload "arc-en-ciel P2.bmp"
'sleep
'TOTAL_des_points=0
FOR locLIGNE=0 TO HAUTIMAGE_ARC-1
'FOR COLONNE=0 TO LARGIMAGE_ARC-1
locCOULEUR=point (0, locLIGNE)
STOCK_POINTS_ARC (locLIGNE)= locCOULEUR
'' TOTAL_des_points+=COULEUR
'NEXT
NEXT
cls
END SUB
'88888888888888888888888888888888888888888888888888888888888888888
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'FIN DES SUBROUTINES
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++