import java.util.*;
public class Sistema {
final int nParticulas=500;
//dimensiones de la región donde se mueven las partículas
int ancho;
int alto;
//masa de las partículas térmicas
final double Mt=1.0;
//masa de las partículas brownianas
double Mb;
//velocidad de las partículas térmicas
double Vt;
//intervalo de tiempo
final double dt=1.0;
//Fuerza externa
double Fa;
//Posición de las partículas
public double[] X, Y;
//Velocidades de las partículas
double[] VX, VY;
//números al azar
Random rnd=new Random();
public Sistema(double Vt, double Mb, double Fa, int eleccion, int ancho, int alto) {
this.ancho=ancho;
this.alto=alto;
this.Vt=Vt;
this.Mb=Mb;
this.Fa=Fa;
//estado inicial
X=new double[nParticulas];
Y=new double[nParticulas];
VX=new double[nParticulas];
VY=new double[nParticulas];
for(int i=0; i<nParticulas; i++){
VY[i]=VY[i]=0;
}
//estado inicial
switch(eleccion){
case 0: //arriba
for(int i=0; i<nParticulas; i++){
Y[i]=0;
}
break;
case 1: //abajo
for(int i=0; i<nParticulas; i++){
Y[i]=alto;
}
break;
case 2: //en medio
for(int i=0; i<nParticulas; i++){
Y[i]=alto/2;
}
break;
case 3: //al azar
for(int i=0; i<nParticulas; i++){
Y[i]=(int)(alto*rnd.nextDouble());
}
break;
default:
break;
}
//distribución al azar en el eje horizontal
for(int i=0; i<nParticulas; i++){
X[i]=(int)(ancho*rnd.nextDouble());
}
}
public void evolucion(){
double Ux, Uy, angulo;
for(int i=0; i<nParticulas; i++){
angulo=2*Math.PI*rnd.nextDouble();
Ux=VX[i]-Vt*Math.sin(angulo);
Uy=VY[i]-Vt*Math.cos(angulo);
angulo=2*Math.PI*rnd.nextDouble();
VY[i]+=(Mt/(Mt+Mb))*(Uy*(Math.cos(angulo)-1)-Ux*Math.sin(angulo))+Fa*dt;
VX[i]+=(Mt/(Mt+Mb))*(Ux*(Math.cos(angulo)-1)+Uy*Math.sin(angulo));
X[i]+=VX[i]*dt;
Y[i]+=VY[i]*dt;
//condiciones de contorno
if(X[i]<0){
X[i]=-X[i];
VX[i]=-VX[i];
}
if(X[i]>ancho){
X[i]=2*ancho-X[i];
VX[i]=-VX[i];
}
if(Y[i]<0){
Y[i]=-Y[i];
VY[i]=-VY[i];
}
if(Y[i]>alto){
Y[i]=2*alto-Y[i];
VY[i]=-VY[i];
}
}
}
}
|