Я смущен целью разделения пути на 100 частей.
Очевидным решением для получения расстояния до конца пути будет формула расстояния:
distance = Math.sqrt(Math.pow(2, (x1-x2)) + Math.pow(2, (y1-y2));
Если вы хотите найти расстояние по определенному маршруту между двумя точками (скажем, по улицам и уклоняться от зданий), то вы могли бы сделать это с таким набором «пунктов назначения» и совершенно другой проблемой, ваш пример показывает точки как прямую линию между точками в любом случае. (Я предполагаю, что вы имели в виду, что входная позиция 2 была x = 9, y = 3).
РЕДАКТИРОВАТЬ: Если вы имели в виду, что вам дан набор точек и вам нужно найти расстояние вдоль пути, вы должны использовать ту же формулу, как показано ниже:
double distance = 0;
for(int i=1; i<numberOfLocations; i++)
{
Location oldLoc = collection.get(i-1);
Location nextLoc = collection.get(i);
int x = nextLoc.getX() - oldLoc.getX();
int y = nextLoc.getY() - oldLoc.getY();
distance = distance + Math.sqrt(Math.pow(2, x) + Math.pow(2, y);
}
... расстояние будет суммой расстояний между каждой точкой.
Если проблема заключается в разделении пути на 'N' частей, вы можете использовать следующее:
//numberOfPoints must be greater than 1.
public ArrayList<Location> divideIntoPoints(Location pointA, Location pointB, int numberOfPoints)
{
ArrayList<Location> locationList = new ArrayList<Location>();
xStart = pointA.getX();
xInterval = (pointB.getX() - pointA.getX()) / (numberOfPoints - 1);
yStart = pointA.getY();
yInterval = (pointB.getY() - pointA.getY()) / (numberOfPoints - 1);
for(int i=0; i<numberOfPoints; i++)
{
locationList.add( new Location( (xStart + (i*xInterval)), (yStart + (i*yInterval))) );
}
return locationList;
}
, который будет возвращать ArrayList заданного числа Locations, равномерно распределенных по пути от точки A к точке B.