Скорее всего это связано с неполным пониманием (мной) специфики языка JAVA.
В общем: имеется двумерный массив array[][], где каждой координате соответствует либо ноль, либо не ноль. Не ноль — значит в этой точке центр окружности, а радиус задан извне и он на протяжении цикла постоянен. Значение элемента массива означает приблизительную вероятность того, что в этой точке действительно должен находиться центр окружности. Существует некий параметр (
kriteria
), который отсекает все маловероятные варианты.
Есть много окружностей, у которых центры находятся очень близко друг к другу, а также есть пересекающиеся окружности. Это вредно, т.к. данные массива используются для последующей статистической обработки.
Собственно, как я это делаю:
- // Анализ исходного массива.
- for (int x1 = 0; x1 < width; x1++) {
- for (int y1 = 0; y1 < height; y1++) {
- // Если счётчик меньше критерия, то обнуляем его к чёрту.
- if (array[x1][y1] < kriteria) {
- array[x1][y1] = 0;
- } else { // Если нет- продолжаем сравнение.
- for (int x2 = x1 + 1; x2 < width; x2++) {
- for (int y2 = y1 + 1; y2 < height; y2++) {
- // Если счётчик меньше критерия, то обнуляем его к чёрту.
- if (array[x2][y2] < kriteria) {
- array[x2][y2] = 0;
- } else { // Если нет - продолжаем сравнение.
- // Самое время вычислить расстояние между окружностями.
- long rasst = Math.round(Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)));
- if (rasst < rasstKriteria) {
- array[x2][y2] = array[x1][y1] + array[x2][y2];
- array[x1][y1] = 0;
- }
- }
- }
- }
- }
- }
- }
При этом огромная часть (массив 3000х2000) ненужных точек отсекается, но часть всё равно остаётся! ЧЯДНТ? Я ошибся в коде? Подскажите пожалуйста, у кого есть немного времени!