В качестве входных данных у меня есть кластеры 2D-массива PointXY [] [], которые выглядят следующим образом:
[[23.237633,53.78671], [69.15293,17.138134], [23.558687,45.70517]] . . .
[[47.851738,16.525734], [47.802097,16.689285], [47.946404,16.732542]]
[[47.89601,16.638218], [47.833263,16.478987], [47.88203,16.45793]]
[[47.75438,16.549816], [47.915512,16.506475], [47.768547,16.67624]]
.
.
.
Таким образом, элементы в массиве имеют тип PointXY [], определенный следующим образом
public PointXY(float x, float y) {
this.x = x;
this.y = y;
}
то, что я хотел бы сделать, это отсортировать входные кластеры и записать отсортированные в массив PointXY [] [] clusterSorted, чтобы каждый PointXY (кроме первой строки) в кластерах сравнивался с каждым значением первой строки. Другими словами, элементы из синего набора на картинке ниже сравниваются со всеми значениями, обведенными красным. Поэтому я хотел бы сравнить каждое значение, начиная со 2-й строки, с каждым значением в первой строке.
Сравнение выполняется путем вызова евклидовой функции.
public double euclidian(PointXY other) {
return Math.sqrt(Math.pow(this.x - other.x, 2)
+ Math.pow(this.y - other.y, 2));
}
Вывод должен быть двухмерного массива одного типа, но под каждым Точка, обведенная красным кружком (которая остается на том же месте в выходном массиве), должна быть точками из синей части, которые наиболее близки (по евклидовому расстоянию) к значению в красном кружке.
Итак, это структура данных для кластеризации K-средних, так что каждый кластер представляет собой столбец (обведен зеленым), а первая точка - это центр (обведены красным) кластера и все другие точки (обведены желтым) в столбце - это точки, назначенные центру.
Итак, вопрос в том, как перебирать кластеры входного массива, сравнивать значения, как описано, и записывать их в кластеры массиваSorted.
EDIT: я хотел бы рассчитать евклидово расстояние между каждой точкой, выделенной синим кружком, со всеми значениями, обведенными красным. А затем отсортируйте их по минимальному евклидову расстоянию. Таким образом, в кластерах выходных массивов каждая отсортированная точка из набора, обведенного синим, будет находиться под ближайшей точкой, обведенной красным.