Глядя на картинку, с которой вы связались, я думаю, что вы хотите сделать Double.compare()
на расстоянии L1 точки от верхнего левого угла.
Это означает, что для заданных 2d точек a
и b
и «начала координат» Origin
(в данном случае верхней левой точки) вы хотите сравнить:
distance_a = Math.abs(Origin.x - a.x) + Math.abs(Origin.y - a.y)
distance_b = Math.abs(Origin.x - b.x) + Math.abs(Origin.y - b.y)
return Double.compare(distance_a,distance_b);
и сортируйте, сравнивая эти расстояния. Вы могли бы обернуть это в разумный компаратор, который использует Double.compare()
.
Обновление: теперь я понимаю дополнительные критерии сортировки после вашего последнего комментария. Возможно, вы захотите учесть точность проблем при сравнении двойных значений (кто-то другой сможет посоветовать вам лучше), однако вам нужно что-то вроде:
distance_a = Math.abs(Origin.x - a.x) + Math.abs(Origin.y - a.y)
distance_b = Math.abs(Origin.x - b.x) + Math.abs(Origin.y - b.y)
if distance_a is not equal to distance_b // check how you should perform the comparison
return Double.compare(distance_a,distance_b);
else
return Double.compare(a.x,b.x);