use of org.vcell.util.geometry2d.Point2D in project vcell by virtualcell.
the class NailShapeEnergyFunction method getEnergy.
public double getEnergy(List<Point2D> ps) {
if (ps.size() < 2) {
throw EnergySum.Default.getWrongNUmberOfParametersException(getNumberOfParameters(), ps.size());
}
Point2D p0 = ps.get(0);
Point2D p1 = ps.get(1);
double dx = p1.x - p0.x;
double dy = p1.y - p0.y;
double rSquared = dx * dx + dy * dy;
return rSquared < rMaxSquared ? k * (rMaxSquared / rSquared - 1.0) : 0.0;
}
use of org.vcell.util.geometry2d.Point2D in project vcell by virtualcell.
the class NailShapeEnergyFunction method getForce.
public Vector2D getForce(List<Point2D> ps, int index) {
if (ps.size() < 2) {
throw EnergySum.Default.getWrongNUmberOfParametersException(getNumberOfParameters(), ps.size());
}
Point2D p0 = ps.get(0);
Point2D p1 = ps.get(1);
double dx = 0.0, dy = 0.0;
switch(index) {
case 0:
{
dx = p1.x - p0.x;
dy = p1.y - p0.y;
double r = Math.sqrt(dx * dx + dy * dy);
double r3 = r * r * r;
return new Vector2D(k * dx / r3, k * dy / r3);
}
case 1:
{
dx = p0.x - p1.x;
dy = p0.y - p1.y;
}
}
double rSquared = dx * dx + dy * dy;
if (rSquared < rMaxSquared) {
double factor = 2 * k * rMaxSquared / (rSquared * rSquared);
return new Vector2D(factor * dx, factor * dy);
} else {
return new Vector2D();
}
}
use of org.vcell.util.geometry2d.Point2D in project vcell by virtualcell.
the class CoulombEnergyFunction method getEnergy.
public double getEnergy(List<Point2D> ps) {
if (ps.size() < 2) {
throw EnergySum.Default.getWrongNUmberOfParametersException(getNumberOfParameters(), ps.size());
}
Point2D p0 = ps.get(0);
Point2D p1 = ps.get(1);
double dx = p1.x - p0.x;
double dy = p1.y - p0.y;
double r = Math.sqrt(dx * dx + dy * dy);
return k / r;
}
use of org.vcell.util.geometry2d.Point2D in project vcell by virtualcell.
the class ParabularEnergyFunction method getEnergy.
public double getEnergy(List<Point2D> ps) {
if (ps.size() < 2) {
throw EnergySum.Default.getWrongNUmberOfParametersException(getNumberOfParameters(), ps.size());
}
Point2D p0 = ps.get(0);
Point2D p1 = ps.get(1);
double dx = p1.x - p0.x;
double dy = p1.y - p0.y;
return k * (dx * dx + dy * dy);
}