Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 381

Рекурсия: Разбить отрезок, заданный двумя точками, на отрезки меньшего размера...

03.07.2017, 02:32. Показов 4660. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 точки координат (прямой отрезок). Нужно разбить его на отрезки по меньше (конкретно < 20 метров).
К координатам я не умею добавлять расстояние к примеру, 20 метров от точки, (если вы знаете как добавить 20 метров от точки зная направление, поделитесь, это очень облегчит работу), зато я умею находить центр между 2мя точками.
И потому решил делить отрезки на под отрезки и т.д. пока отрезок не будет меньше 20 метров и записать все точки в массив.
Это явно решается рекурсией, но еще так же важно записать полученные точки по порядку в массив.
Миниатюры
Рекурсия: Разбить отрезок, заданный двумя точками, на отрезки меньшего размера...  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2017, 02:32
Ответы с готовыми решениями:

Массивы: пары соседних членов описывают концы отрезков. Накрывают ли полностью эти отрезки заданный отрезок
Привет всем. Помогите пожалуйста решить вот эти задачки. 1)В случайной последовательности x1,x2,...,x2n – пары соседних членов х2k-1...

Отрезок между двумя точками, проходящий через окружность
У меня есть две точки (А и B) на плоскости и окружность между ними. Как можно в программе написать, проходит ли отрезок между двумя точками...

Построить отрезок между двумя точками, определенными как экземпляры класса Point
помогите пожалуйста. класс с координатами есть осталось построить отрезок между двумя точками, определенными как экземпляры класса...

30
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
04.07.2017, 12:32
Студворк — интернет-сервис помощи студентам
Aviz__, ну человек и обратился за помощью, в том числе чтобы понять, чего он хочет. Не хватает матчасти - вот пути для образования.
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
04.07.2017, 12:53
RedPatrick, Может вы и правы, а может и нет. Когда чел не знает чего хочет, то все могут быть правы... или нет.
0
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 381
05.07.2017, 01:30  [ТС]
Aviz__,
Цитата Сообщение от Aviz__ Посмотреть сообщение
double result = (p2 - p1)/2;
видимо тут должно быть + а не -. Это и сбило с мысли

Добавлено через 11 минут
xoraxax, подставим координаты (1,2), (6,6) в формулу
первая часть: (1,2) - (6/2, 6/2) = (-2, -1) уже что-то не то, так как центр этих координат (4, 3.5)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.07.2017, 01:35
Чё то у тебя и с логикой плохо и с математикой не очень. Для начала передвинь вектор в начало координат, потом подумай и пойми, что это не минус, а тире между началом и концом отрезка.
0
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 381
05.07.2017, 01:50  [ТС]
Gr1f0nn, сортировочный вариант не подошел так как там используются "int len_1 = arr_1.length, len_2 = arr_2.length;" arr_1 и arr_2 у меня будут представлены как две точки на координатах

Добавлено через 10 минут
xoraxax, первая часть: (1,2) - (6/2= 3, 6/2= 3) уже что-то не то, так как центр этих координат (4, 3.5).
Точка (3,3) не лежит на прямой (1,2) (6,6), или я что-то не так сделал?
Если бы я знал как сделать, не создавал бы тему.
0
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
05.07.2017, 04:26
Цитата Сообщение от powowstal Посмотреть сообщение
сортировочный вариант не подошел так как там используются "int len_1 = arr_1.length, len_2 = arr_2.length;"
Цитата Сообщение от powowstal Посмотреть сообщение
arr_1 и arr_2 у меня будут представлены как две точки на координатах
А в чем проблема представить отрезок как некий массив точек? Длину отрезка по двум точкам найти можно, а дальше рекурсивно делите отрезок и сохраняете найденные точки куда-нибудь в массив, если это необходимо
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
05.07.2017, 09:00
Цитата Сообщение от powowstal Посмотреть сообщение
Это и сбило с мысли
А какая мысль то была?
Если у вас получится тот же ответ с (+) то, Вы гений всех времен и народов!
0
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 381
05.07.2017, 22:12  [ТС]
Добавлено через 5 минут
Gr1f0nn,
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
делите отрезок и сохраняете найденные точки куда-нибудь в массив, если это необходимо
Это и есть суть задачи)

Добавлено через 5 часов 21 минуту
Aviz__, так и не смог реализовать ваш способ. Хотя и нашел еще один выход с помощью вашего кода - 1 рекурсивно найти самый маленький отрезок который удовлетворяет условию > 20 метров, от начала координат ((A),(D)), отнять D от начала отрезка А (A - D) это будет шаг, и добавлять эти шаги к точке А.


Но вот мне подсказали:
Рекурсивный метод для решения задачи


А это моя реализация:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
main(){
MyPoints g = new MyPoints();
myPoints.recurs(new LatLng(52.938719, 33.649940), new LatLng(52.943453, 33.666594));
}
 
 public  class MyPoints{
    public List<LatLng> mass = new ArrayList<>();//массив точек
    LatLng recurs(LatLng A, LatLng B){
        LatLng center = (new LatLng ((A.latitude+B.latitude)/2, (A.longitude+B.longitude)/2));//середина
        if(getDistanceBetweenPoints(A.latitude,A.longitude ,center.latitude,center.longitude)>20){//расстояние
 
            recurs(A,center);
            mass.add(center);
            recurs(center,B);
        }
    }
}
Добавлено через 7 минут
RedPatrick,
Цитата Сообщение от RedPatrick Посмотреть сообщение
Код
х(n) = x(n - 1) + length * cos(angle)
y(n) = y(n - 1) + length * sin(angle),
где x(n), y(n) - координаты точек, а length - длина искомого отрезка
сложновато для меня (
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
06.07.2017, 10:34
powowstal, ничего сложного
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static List<Double[]> divideSegment (double[] coordinates, double length){
        double angle = Math.atan((coordinates[2] - coordinates[0]) / (coordinates[3] - coordinates[1]));
        List<Double[]> result = new ArrayList<Double[]>();
        double x = coordinates[0];
        double y = coordinates[1];
        while (x >= coordinates[0] && x <= coordinates[2]){
            Double[] temp = {x, y};
            result.add(temp);
            x = x + Math.cos(angle) * length;
            y = y + Math.sin(angle) * length;
        }
        return result;
    }
Я даже нарисовал картинку, но вложения почему-то не работают. Если построить оси Х и Y декартовой системы координат, построить отрезок АВ, провести из точки А линию, параллельную оси Х, то angle - угол между этой линией и отрезком AB.

Добавлено через 17 секунд
powowstal, ничего сложного
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static List<Double[]> divideSegment (double[] coordinates, double length){
        double angle = Math.atan((coordinates[2] - coordinates[0]) / (coordinates[3] - coordinates[1]));
        List<Double[]> result = new ArrayList<Double[]>();
        double x = coordinates[0];
        double y = coordinates[1];
        while (x >= coordinates[0] && x <= coordinates[2]){
            Double[] temp = {x, y};
            result.add(temp);
            x = x + Math.cos(angle) * length;
            y = y + Math.sin(angle) * length;
        }
        return result;
    }
Я даже нарисовал картинку, но вложения почему-то не работают. Если построить оси Х и Y декартовой системы координат, построить отрезок АВ, провести из точки А линию, параллельную оси Х, то angle - угол между этой линией и отрезком AB.

Добавлено через 1 минуту
powowstal, ничего сложного
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static List<Double[]> divideSegment (double[] coordinates, double length){
        double angle = Math.atan((coordinates[2] - coordinates[0]) / (coordinates[3] - coordinates[1]));
        List<Double[]> result = new ArrayList<Double[]>();
        double x = coordinates[0];
        double y = coordinates[1];
        while (x >= coordinates[0] && x <= coordinates[2]){
            Double[] temp = {x, y};
            result.add(temp);
            x = x + Math.cos(angle) * length;
            y = y + Math.sin(angle) * length;
        }
        return result;
    }
Я даже нарисовал картинку, но вложения почему-то не работают. Если построить оси Х и Y декартовой системы координат, построить отрезок АВ, провести из точки А линию, параллельную оси Х, то angle - угол между этой линией и отрезком AB.

Добавлено через 1 минуту
powowstal, ничего сложного
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static List<Double[]> divideSegment (double[] coordinates, double length){
        double angle = Math.atan((coordinates[2] - coordinates[0]) / (coordinates[3] - coordinates[1]));
        List<Double[]> result = new ArrayList<Double[]>();
        double x = coordinates[0];
        double y = coordinates[1];
        while (x >= coordinates[0] && x <= coordinates[2]){
            Double[] temp = {x, y};
            result.add(temp);
            x = x + Math.cos(angle) * length;
            y = y + Math.sin(angle) * length;
        }
        return result;
    }
Я даже нарисовал картинку, но вложения почему-то не работают. Если построить оси Х и Y декартовой системы координат, построить отрезок АВ, провести из точки А линию, параллельную оси Х, то angle - угол между этой линией и отрезком AB.

Добавлено через 30 минут

Не по теме:

Кошмар! Что-то сломался мой браузер. Модераторы, пожалуйста, исправьте мое безобразие.

1
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
06.07.2017, 10:35
powowstal, Да, вы шутник батенька! Это не мой способ, а то, что вы хотели... Если вы, все же вчитываетесь в то, что вам пишут, то могли бы понять необходимость постановки более четкого ТЗ. И что рекурсия, в моей реализации, не самый лучший способ реализации нахождения наиболее близкого к заданному (в моем примере задано 3.0, а находит 2.5) расстояния.
Но, нужно отдать должное вашему упорству По видимому, вам нен больше 15 лет и у вас все еще впереди. Не останавливайтесь в изучении основ, чтобы мочь "летать".
0
06.07.2017, 10:37

Не по теме:

Судя по сообщению Aviz__ и тому. что с другими сайтами все хорошо, проблемы у форума :(

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.07.2017, 10:37

Определить попадает ли точка М(х, у) в прямоугольник, заданный двумя противоположными точками А(х1, у1) и В(х2, у2). (ис
Определить попадает ли точка М(х, у) в прямоугольник, заданный двумя противоположными точками А(х1, у1) и В(х2, у2). (используйте тернарный...

Рекурсия: разбить прямоугольник на квадраты максимального размера
помогите пожалуйста Написать программу для решения задачи. Задан прямоугольник со сторонами а и в. Разбиваем его на части с помощью...

Рекурсия: разбить прямоугольник на квадраты максимального размера
Написать программу для решения задачи. Задан прямоугольник со сторонами а и в. Разбиваем его на части с помощью квадратов. Определить,...

С клавиатуры вводятся два числа задающие отрезок [a, b]. Определить, попадает ли третье число c в заданный отрезок
Tasm 1.4, DosBox

Отрезок разбит на равные отрезки длины H с концами в N точках
3.Дано целое число N (&gt; 2) и две вещественные точки на числовой оси: A, B (A &lt; B). Отрезок разбит на равные отрезки длины H с концами в N...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru