Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit d7f24dfa authored by Marion Goedel's avatar Marion Goedel
Browse files

Added comments to soft shell potential (variable names according to sivers-2016b).

parent 7dc0825d
Pipeline #59538 passed with stage
in 47 seconds
...@@ -19,12 +19,15 @@ import org.vadere.util.geometry.shapes.VCircle; ...@@ -19,12 +19,15 @@ import org.vadere.util.geometry.shapes.VCircle;
import org.vadere.util.geometry.shapes.VPoint; import org.vadere.util.geometry.shapes.VPoint;
import org.vadere.util.math.MathUtil; import org.vadere.util.math.MathUtil;
// Implementation of the soft shell repulsive potential of pedestrians according to sivers-2016b.
// page 46, eq. 4.1
public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldAgent { public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldAgent {
private AttributesPotentialCompactSoftshell attributes; private AttributesPotentialCompactSoftshell attributes;
private double intimateWidth; private double intimateWidth; // radius of intimate zone \delta_{int}
private double personalWidth; private double personalWidth; // radius of personal width \delta_{per}
private double height; private double height; // intensity of repulsion \mu_p
public PotentialFieldPedestrianCompactSoftshell() {} public PotentialFieldPedestrianCompactSoftshell() {}
...@@ -49,26 +52,26 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA ...@@ -49,26 +52,26 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA
public double getAgentPotential(VPoint pos, Agent pedestrian, public double getAgentPotential(VPoint pos, Agent pedestrian,
Agent otherPedestrian) { Agent otherPedestrian) {
double radii = pedestrian.getRadius() + otherPedestrian.getRadius(); double radii = pedestrian.getRadius() + otherPedestrian.getRadius(); // 2* r_p (sivers-2016b)
double potential = 0; double potential = 0;
double distnaceSq = otherPedestrian.getPosition().distanceSq(pos); double distanceSq = otherPedestrian.getPosition().distanceSq(pos);
double maxDistanceSq = (Math.max(personalWidth, intimateWidth) + radii) * (Math.max(personalWidth, intimateWidth) + radii); double maxDistanceSq = (Math.max(personalWidth, intimateWidth) + radii) * (Math.max(personalWidth, intimateWidth) + radii);
if(distnaceSq < maxDistanceSq) { if(distanceSq < maxDistanceSq) {
double distance = otherPedestrian.getPosition().distance(pos); double distance = otherPedestrian.getPosition().distance(pos); // Euclidean distance d_j(x) between agent j and position x
int intPower = this.attributes.getIntimateSpacePower(); int intPower = this.attributes.getIntimateSpacePower(); // b_p
int perPower = this.attributes.getPersonalSpacePower(); int perPower = this.attributes.getPersonalSpacePower(); // not defined in sivers-2016b (perPower = 1)
double factor = this.attributes.getIntimateSpaceFactor(); double factor = this.attributes.getIntimateSpaceFactor(); // a_p
if (distance < personalWidth + radii) { if (distance < personalWidth + radii) {
potential += this.height * MathUtil.expAp(4 / (Math.pow(distance / (personalWidth + radii), (2 * perPower)) - 1)); potential += this.height * MathUtil.expAp(4 / (Math.pow(distance / (personalWidth + radii), (2 * perPower)) - 1)); // implementation differs from sivers-2016b here: \delta_{per} + r_p (note: radii = 2*r_p)
} }
if (distance < this.intimateWidth + radii) { if (distance < this.intimateWidth + radii) {
potential += this.height / factor potential += this.height / factor
* MathUtil.expAp(4 / (Math.pow(distance / (this.intimateWidth + radii), (2 * intPower)) - 1)); * MathUtil.expAp(4 / (Math.pow(distance / (this.intimateWidth + radii), (2 * intPower)) - 1)); // implementation differs from sivers-2016b here: \delta_{int} + r_p (note: radii = 2*r_p)
} }
if (distance < radii) { if (distance < radii) { // implementations differs from sivers-2016b here : Math.power(distance / (radii),2)
potential += 1000 * MathUtil.expAp(1 / (Math.pow(distance / radii, 4) - 1)); potential += 1000 * MathUtil.expAp(1 / (Math.pow(distance / radii, 4) - 1));
} }
} }
...@@ -94,7 +97,7 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA ...@@ -94,7 +97,7 @@ public class PotentialFieldPedestrianCompactSoftshell implements PotentialFieldA
public Vector2D getAgentPotentialGradient(VPoint pos, public Vector2D getAgentPotentialGradient(VPoint pos,
Vector2D velocity, Agent pedestrian, Vector2D velocity, Agent pedestrian,
Collection<? extends Agent> otherPedestrians) { Collection<? extends Agent> otherPedestrians) {
throw new UnsupportedOperationException("not jet implemented."); throw new UnsupportedOperationException("not yet implemented.");
/*double epsilon = 0.001; /*double epsilon = 0.001;
double dx = 0; double dx = 0;
double dy = 0; double dy = 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment