Fonction InitialisationPotentiels :
Pour i allant de 0 à nh+nb, faire :
Pour j allant de 0 à ng+nd, faire :
Si j <= ng, alors :
V[i;j] = V0*j/ng
sinon si i <= nh, alors :
V[i;j] = V0
Fin si
Fin faire
Fin faire
Fonction CalculPotentiels :
Faire :
convOK = 1
Pour i allant de 0 à nh+nb-1, faire :
Si i < nh, alors borne_j = ng+nd-1, sinon borne_j = ng-1
Pour j allant de 1 à borne_j, faire :
Si i = 0, alors Vtemp = (V[i;j-1]+V[i;j+1]+4*V[i+1;j])/6,
sinon Vtemp = (V[i;j-1]+V[i;j+1]+V[i-1;j]+V[i+1;j])/4+(V[i+1;j]-V[i-1;j])/(8*i)
Vnouv = V[i;j]+w*(Vtemp-V[i;j])
Si |Vnouv-V[i;j]| >= {epsilon}, alors convOK = 0
V[i;j] = Vnouv
Fin faire
Fin faire
Fin faire, tant que convOK = 0
Fonction DessinPotentiels :
Pour i allant de 0 à nh+nb, faire :
Si i < nh, alors borne_j = ng+nd-1, sinon borne_j = ng-1
Pour j allant de 0 à borne_j, faire :
Point ((ResolutionX-1)/2+PasEnPixels*j, (ResolutionY-1)/2+PasEnPixels*i, Nuance(255*(V0+V)/(2*V0)))
Point ((ResolutionX-1)/2+PasEnPixels*j, (ResolutionY-1)/2-PasEnPixels*i, Nuance(255*(V0+V)/(2*V0)))
Point ((ResolutionX-1)/2-PasEnPixels*j, (ResolutionY-1)/2+PasEnPixels*i, Nuance(255*(V0-V)/(2*V0)))
Point ((ResolutionX-1)/2-PasEnPixels*j, (ResolutionY-1)/2-PasEnPixels*i, Nuance(255*(V0-V)/(2*V0)))
Fin faire
Fin faire
Fonction DessinEquipotentielles (nbrEquipot) :
Si estImpaire(nbrEquipot), alors Ligne ((ResolutionX-1)/2, OrigineY, (ResolutionX-1)/2, ResolutionY-1-OrigineY, Nuance(128))
Pour k allant de 1 à [nbrEquipot/2], faire :
Vequipot = V0-2*k*V0/(nbrEquipot+1)
j = [ng*Vequipot/V0]
ancX = ng*Vequipot/V0*PasEnPixels
couleur1 = Nuance(255*(V0+Vequipot)/(2*V0))
couleur2 = Nuance(255*(V0-Vequipot)/(2*V0))
Pour i allant de nh+nb-1 à 0, faire :
Si Vequipot < V[i;j], alors :
Faire :
j = j-1
Fin faire, tant que Vequipot < V[i;j]
sinon si Vequipot > V[i;j+1], alors :
Faire :
j = j+1
Fin faire, tant que Vequipot > V[i;j+1]
Fin si
nouvX = (j+(Vequipot-V[i;j])/(V[i;j+1]-V[i;j]))*PasEnPixels
Ligne ((ResolutionX-1)/2+ancX, (ResolutionY-1)/2-(i+1)*PasEnPixels, (ResolutionX-1)/2+nouvX, (ResolutionY-1)/2-i*PasEnPixels, couleur1)
Ligne ((ResolutionX-1)/2+ancX, (ResolutionY-1)/2+(i+1)*PasEnPixels, (ResolutionX-1)/2+nouvX, (ResolutionY-1)/2+i*PasEnPixels, couleur1)
Ligne ((ResolutionX-1)/2-ancX, (ResolutionY-1)/2-(i+1)*PasEnPixels, (ResolutionX-1)/2-nouvX, (ResolutionY-1)/2-i*PasEnPixels, couleur2)
Ligne ((ResolutionX-1)/2-ancX, (ResolutionY-1)/2+(i+1)*PasEnPixels, (ResolutionX-1)/2-nouvX, (ResolutionY-1)/2+i*PasEnPixels, couleur2)
ancX = nouvX
Fin faire
Fin faire
Fonction TrajectoireElectron (r0,rPrime0,zPrime0) :
i = [r0/PasEnMetres]
j = -(ng+nd)
Si i < -nh ou i > nh-1, alors Fin fonction
Si zPrime0 <= 0, alors Fin fonction
z0 = 0
r0 = r0-i*PasEnMetres
ancX = OrigineX
ancY = (ResolutionY-1)/2+r0*PasEnPixels/PasEnMetres
Pour k allant de 1 à LimiteIterationsTrajectoire, faire :
Si i >= 0 et j >= 0, alors :
V1 = V[i;j] V2 = V[i+1;j] V3 = V[i+1;j+1] V4 = V[i;j+1]
sinon si i >= 0 et j < 0, alors :
V1 = -V[i;-j] V2 = -V[i+1;-j] V3 = -V[i+1;-j-1] V4 = -V[i;-j-1]
sinon si i < 0 et j >= 0, alors :
V1 = V[-i;j] V2 = V[-i-1;j] V3 = V[-i-1;j+1] V4 = V[-i;j+1]
sinon si i < 0 et j < 0, alors :
V1 = -V[-i;-j] V2 = -V[-i-1;-j] V3 = -V[-i-1;-j-1] V4 = -V[-i;-j-1]
Fin si
{On précalcule les coefficients qui seront utilisés dans le calcul des positions et des vitesses.}
t = 0
{On a z(t) = z0 et zPrime(t) = zPrime0.}
ANNULATION_FONCTION (z(t)-PasEnMetres)
{On actualise r(t) et rPrime(t) avec la nouvelle valeur de t.}
Si r(t) < 0, alors :
direction = GAUCHE
ANNULATION_FONCTION (r(t))
{On actualise les valeurs de z(t) et zPrime(t)}
si r(t) > 0, alors :
direction = DROITE
ANNULATION_FONCTION (r(t)-PasEnMetres)
{On actualise les valeurs de z(t) et zPrime(t)}
sinon :
direction = TOUT_DROIT
Fin si
nouvX = (ResolutionX-1)/2+(j+z(t)/PasEnMetres)*PasEnPixels
nouvY = (ResolutionY-1)/2+(i+r(t)/PasEnMetres)*PasEnPixels
Ligne (ancX, ancY, nouvX, nouvY, NOIR)
ancX = nouvX ancY = nouvY
rPrime0 = rPrime(t)
zPrime0 = zPrime(t)
Si direction = GAUCHE, alors :
i = i-1
Si i < -nh, alors Fin fonction
r0 = r(t)+PasEnMetres
z0 = z(t)
sinon si direction = DROITE, alors :
i = i+1
Si i > nh-1, alors Fin fonction
r0 = r(t)-PasEnMetres
z0 = z(t)
sinon si direction = TOUT_DROIT, alors :
j = j+1
Si j > ng+nd-1, alors Fin fonction
r0 = r(t)
z0 = z(t)-PasEnMetres
Fin si
Fin faire