private static int buildRings( final IScope scope, final IAgentFilter filter, final Double distance, final List<Double> rings, final Map<Double, Integer> ringsPn, final IAddressableContainer<Integer, IAgent, Integer, IAgent> agents) { IList<ILocation> locs = GamaListFactory.create(Types.POINT); for (IAgent ag : agents.iterable(scope)) { locs.add(ag.getLocation()); } ILocation centralLoc = (ILocation) Stats.getMean(scope, locs); IAgent centralAg = scope.getTopology().getAgentClosestTo(scope, centralLoc, filter); List<IAgent> neighbors = distance == 0 || filter == null ? new ArrayList<IAgent>() : new ArrayList<IAgent>( scope.getTopology().getNeighborsOf(scope, centralAg, distance, filter)); for (IAgent ag : neighbors) { double dist = centralLoc.euclidianDistanceTo(ag.getLocation()); if (dist == 0) { continue; } if (!rings.contains(dist)) { rings.add(dist); ringsPn.put(dist, 1); } else { ringsPn.put(dist, 1 + ringsPn.get(dist)); } } Collections.sort(rings); for (int i = 1; i < rings.size(); i++) { double dist = rings.get(i); double dist1 = rings.get(i - 1); ringsPn.put(dist, ringsPn.get(dist) + ringsPn.get(dist1)); } return rings.size(); }
@Override public Collection<? extends IPopulation> getPopulations(final IScope scope) { return Collections.singleton(getPopulation(scope)); }