From 5bf93e39cac1a0bd86e176e7ffc8d1ed6b76f912 Mon Sep 17 00:00:00 2001 From: Julian Zobel Date: Mon, 10 Dec 2018 17:08:32 +0100 Subject: [PATCH] Random attraction generator now also gives a randomly generated radius to all APs. APs cannot have overlapping Radii --- .../attraction/RandomAttractionGenerator.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomAttractionGenerator.java b/src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomAttractionGenerator.java index 69f71eb4..258365be 100644 --- a/src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomAttractionGenerator.java +++ b/src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomAttractionGenerator.java @@ -39,10 +39,11 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; * position randomly within the world dimensions. * * v1.1: statically available attraction points [JZ] - * v1.2: added a minimum distance between attraction points [JZ] + * v1.2: added a minimum distance between attraction points [JZ] + * v1.21: added a random radius to attraction points. Minimum is 10 meters, default maximum 100 meters. APs cannot have overlapping radii. * * @author Christoph Muenker, Julian Zobel - * @version 1.2, 11 2018 + * @version 1.21, 12 2018 */ public class RandomAttractionGenerator implements IAttractionGenerator { @@ -56,6 +57,8 @@ public class RandomAttractionGenerator implements IAttractionGenerator { private double minimumDistance = 50; + private double maximumRadius = 100; + @XMLConfigurableConstructor({"numberOfAttractionPoints"}) public RandomAttractionGenerator(int numberOfAttractionPoints) { this.rand = Randoms.getRandom(RandomAttractionGenerator.class); @@ -89,15 +92,21 @@ public class RandomAttractionGenerator implements IAttractionGenerator { create: for (int i = 0; i < numberOfAttractionPoints; i++) { PositionVector posVec = createPosVec(); - + + AttractionPoint aPoint = new AttractionPointImpl("AP-"+i, posVec); + // set the radius of this attraction point + // minimum radius is 10 meters + aPoint.setRadius(Math.max(10, rand.nextDouble() * maximumRadius)); + for (AttractionPoint ap : result) { - if(posVec.distanceTo(ap) < minimumDistance) { + // if this point is closer than the given minimum distance to another point, or the radii of the points would overlap, + // then discard this attraction point and create a new one + if(aPoint.distanceTo(ap) < minimumDistance || (aPoint.distanceTo(ap) - aPoint.getRadius() - ap.getRadius()) < 0) { i--; continue create; } } - AttractionPoint aPoint = new AttractionPointImpl("AP"+i, posVec); result.add(aPoint); } @@ -118,4 +127,12 @@ public class RandomAttractionGenerator implements IAttractionGenerator { public void setMinimumDistance(double distance) { this.minimumDistance = distance; } + + /** + * Set a maximum radius that an attraction point can have. Minimum is 10 meters. + * @param radius + */ + public void setMaximumRadius(double radius) { + this.maximumRadius = radius; + } } -- GitLab