Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/41: Рейтинг темы: голосов - 41, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
1

Поиск ближайших точек по координатам

15.02.2015, 23:53. Показов 7948. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На плоскости заданы 5 точек с координатами (x0, y0), (x1, y1) ... (x4, y4). Найти две ближайшие точки.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Method{
public static void main(String[] args){
int n=5, m=2;
    int i, j;
    double distance;
int[][] a = new int[5][2];
a[0][0]=2;
a[0][1]=-3;
a[1][0]=5;
a[1][1]=0;
a[2][0]=3;
a[2][1]=3;
a[3][0]=9;
a[3][1]=-5;
a[4][0]=8;
a[4][1]=4;
for (i=0; i<n; i++){
k=i+1;
System.out.println("Koordinaty tochki " + k + ":");
        for (j=0; j<m; j++)
{
System.out.print(a[i][j]+"  ");
}
System.out.println(" ");
}
 
    for (i=0; i<n; i++)
        for (j=i+1; j<m; j++)
        {
            distance=Math.sqrt(Math.pow((a[i][0]-a[i+1][0]), 2)+Math.pow((a[i][1]-a[i+1][1]), 2));} }
}
Мучаю-мучаю задание, ничего не приходит в голову, только бред какой-то ( Нужно создать метод, который бы проверял расстояние между точками и сравнивал его. Help please)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2015, 23:53
Ответы с готовыми решениями:

Поиск ближайших точек
На плоскости случайно расставляются точки. Далее задаётся ещё одна точка, для которой нужно найти n...

Поиск ближайших точек, язык си
Здравствуйте! Есть задача: 1.Фиксируем несколько точек (А,Б,С.Д и т.д. их может быть сколько...

Поиск пары ближайших точек
Подскажите пожалйста, алгоритмы решения задачи о паре ближайших точек

Поиск трех ближайших точек к данной
Есть массив точек, заданных координатами х и y. Нужно найти три ближайшие точки к данной, чтобы...

7
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
16.02.2015, 05:18 2
Если всё самому реализовывать не обязательно, то уже есть готовый класс точки Point2D.Double. Можно типа так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.awt.geom.Point2D;
 
    class Line implements Comparable {
        Point2D a, b;
 
        @Override
        public int hashCode() {
            return a.hashCode() + b.hashCode();
        }
 
        @Override
        public boolean equals(Object obj) {
            if (obj == null) return false;
            if (getClass() != obj.getClass()) return false;            
            Line o = (Line) obj;
            if (o == this) return true;
            if (o.a.equals(a) && o.b.equals(b)) return true; // из А в В
            if (o.b.equals(a) && o.a.equals(b)) return true; //либо из В в А - одна и та же линия
            return false;
        }
        
        //длина линии
        public double length() {
            return a.distance(b);
        }
 
        @Override
        public int compareTo(Object o) {
            Line l = (Line)o;
            double difference = l.length() - this.length();
            if (difference < 0) return -1;
            if (difference > 0) return 1;
            return 0;
        }
                                
    }
Потом формируем из точек все возможные линии, закидываем в список, и сортируем (уже сделано в стд. библиотеке, вручную тока критерий сортировки в методе compareTo). Ближайшая и наиболее отдалённая пары окажутся по краям.
1
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
16.02.2015, 09:58  [ТС] 3
Спасибо большое, с этим постараюсь разобраться, но думаю, что нужно таки вручную. Я только начинаю java учить и хочу все постепенно, чтоб не запутаться) можно как то через цикл for их сравнить? Наподобие много "кода". Просто определить длину каждой пары и сравнить после?
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
16.02.2015, 10:25 4
Можно и так. Например, записать все растояния в матрицу 5х5 и найти минимальный элемент (таких будет 2). Или в треугольный массив (сложнее, но не избыточно по памяти).
0
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
16.02.2015, 10:34  [ТС] 5
Вот я про матрицу и хотела спросить. Не подскажите как реализовать это? А то не очень понимаю. Я думала матрицу 5x2 ну пять точек всего и у каждой по 2 координаты. Но с этим и запуталась.

Добавлено через 4 минуты
А, я поняла почему 5 на 5... Просто тут мы не будем считать расстояние ад и да одинаковым..
Но проблема в том как узнать эти расстояния, какой то метод использовать, чтоб оно по очереди считало все 25 расстояний?
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
16.02.2015, 10:47 6
Цитата Сообщение от AlexHolmes Посмотреть сообщение
Но проблема в том как узнать эти расстояния, какой то метод использовать, чтоб оно по очереди считало все 25 расстояний?
В двойном цикле жи. Для удобства определите точку в отдельный класс:

Java
1
2
3
class Pnt {
  double x,y;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static double getPointDist(Pnt a, Pnt b) {
  return Math.sqrt(Math.pow((a.x-b.x), 2)+Math.pow((a.y-b.y), 2));
}
 
public static void main(String[] a) {
  //инициализируем массив растояний
  double[][] distances = new double[5];
  for (int i=0; i<5; i++) distances[i]  = new double[5];
 
  Pnt[] input = new Pnt[5]; // массив хранения точек
  //... ввод данных
 
  for (int x=0; x<5; x++)
    for (int y=0; y<5; y++) distances[x][y] = getPointDist(input[x], input[y]); // заполняем растояния
}
1
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
16.02.2015, 14:58  [ТС] 7
Цитата Сообщение от MLPMan Посмотреть сообщение
double[][] distances = new double[5];
* for (int i=0; i<5; i++) distances[i] *= new double[5];Pnt[] input = new Pnt[5]; // массив хранения точек
//... ввод данных
Не очень понятен вот этот отрывок( double[][] distances = new double[5]; почему слева у нас [][], а слева []? И вот это Pnt[] input = new Pnt[5]; что делает input? и как потом ввести данные?
Извините за назойливость.

Ох, так туго идет эта задача хоть и простая вроде...(((
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
16.02.2015, 18:52 8
AlexHolmes,
doble[] - массив из чисел (список)
doble[][] - массив из массивов чисел (таблица)
distances = new double[5] - сначала выделяем память для "корневого" массива
for (int i=0; i<5; i++) distances[i] = new double[5] - потом в цикле для каждого "подмассива" (строки)
Pnt[] input = new Pnt[5] - объявляем и инициализируем (выделяем память для 5 ячеек) массив из объектов типа "Pnt".
1
16.02.2015, 18:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2015, 18:52
Помогаю со студенческими работами здесь

Поиск ближайших точек на сфере. Заплатил бы
Напишите программу, которая среди расположенных на поверхности точек сферы, будет искать ближайшие...

Поиск двух ближайших друг к другу точек
5. Разработать программу, которая ищет во введенном множестве точек (заданных парами...

Поиск ближайших точек в пространстве которые образуют многогранник
Дана точка с координатами (X, Y, Z). Необходимо найти ближайшие к ней 4 точки, которые образуют...

Нахождение ближайших пар точек
Есть два списка точек. Каждая точка характеризуется широтой и долготой (для простоты можно взять x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru