particle.java
per admin
—
darrera modificació
2020-04-06T13:06:42+02:00
package vch.gravity;
public class Particle {
private static int count = 0;
private int id;
public int r,g,b;
public int x,y; // Posición X,Y
public double m; // Masa
public double q; // Carga
public double speed_x=0.0d, speed_y=0.0d; // Velocidad actual
public double force_x=0.0d, force_y=0.0d; // Fuerza sobre la partícula
public Particle() {
id = count++;
}
public String toString() {
return "P" + id + " speed: " + speed_x + "," + speed_y + " force: " + force_x + "," + force_y + " pos: " + x + "," + y;
}
public void resetForce() {
force_x = 0.0d; force_y = 0.0d;
}
public void addForce(Particle p) {
double dist, dist_c;
int sign;
dist = p.x - x;
if(Math.abs(dist) > 50) {
force_x += m*p.m/dist;
}
else if(dist != 0.0d){
force_x -= m*p.m/dist;
}
dist = p.y - y;
if(Math.abs(dist) > 50) {
force_y += m*p.m/dist;
} else if(dist != 0.0d) {
force_y -= m*p.m/dist;
}
/*
// Cálculo con gravedad y campo eléctrico
dist = p.x - x;
dist_c = dist * dist;
if(dist < 0) {sign = -1;} else {sign = 1;}
if(dist_c!=0.0d) {
force_x += 9.8*(m*p.m)/dist_c * sign;
force_x -= (q*p.q)/(dist_c*1.1) * sign;
}
dist = p.y - y;
dist_c = dist * dist;
if(dist < 0) {sign = -1;} else {sign = 1;}
if(dist_c!=0.0d) {
force_y += 9.8*(m*p.m)/dist_c * sign;
force_y -= (q*p.q)/(dist_c*1.1) * sign;
}
*/
}
public void updateSpeed(double t) {
speed_x += t*force_x/m;
speed_y += t*force_y/m;
}
public void updatePosition(double t) {
x += speed_x * t;
y += speed_y * t;
if(x<0) {x=0; speed_x = 0;} if(x>230) {x=230; speed_x = 0;}
if(y<0) {y=0; speed_y = 0;} if(y>278) {y=278; speed_y = 0;}
System.out.println(this);
}
}