package org.lucci.madhoc.network.util;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.lucci.madhoc.network.Station;
import org.lucci.madhoc.network.Connection;
import org.lucci.madhoc.network.Network;
import org.lucci.up.data.Point;
public class Geometry
{
public static double getAverageDistanceBetweenStationsInRange(Network net)
{
double distanceSum = 0;
Iterator connectionIterator = net.getConnections().iterator();
while (connectionIterator.hasNext())
{
Connection connection = (Connection) connectionIterator.next();
distanceSum += connection.getDistance();
}
return distanceSum / net.getConnections().size();
}
public static List<Station> getStationsOrderByTheirDistanceToTheBarycenter(Network net)
{
List<Station> list = new Vector<Station>(net.getStations());
final Point barycenter = getBarycenter(net);
Collections.sort(list, new Comparator<Station>()
{
public int compare(Station s0, Station s1)
{
double d0 = s0.getLocation().getDistanceTo(barycenter);
double d1 = s1.getLocation().getDistanceTo(barycenter);
return Double.compare(d0, d1);
}
});
return list;
}
public static Point getBarycenter(Network net)
{
Collection<Station> stationSet = net.getStations();
if (stationSet.isEmpty())
throw new IllegalArgumentException("no stations");
double xsum = 0, ysum = 0;
for (Station station : stationSet)
{
Point p = station.getLocation();
xsum += p.getX();
ysum += p.getY();
}
return new Point(xsum / stationSet.size(), ysum / stationSet.size());
}
}