Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 2

Сортировка по полярному углу относительно точки

18.11.2015, 21:17. Показов 9945. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с проблемой, у меня есть множество точек в декартовой системе координат. Как отсортировать их по полярному углу относительно нижней-левой точки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2015, 21:17
Ответы с готовыми решениями:

Сортировка по полярному углу
Отсортировать точки на плоскости, заданные декартовыми координатами, по полярному углу

Сместить векторы относительно углу поворота
Пытаюсь вычислить координаты прицела (векторы), чтобы пустить луч, да вот не получается Что у меня получилось: Если не...

Найти вектор по точке и углу поворота относительно оси Х
Здравствуйте. Не могу найти формулу, по которой бы можно было получить вектор v(a,b), зная точку на плоскости и угол поворота...

15
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
19.11.2015, 04:27
сортируйте по косинусу угла
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,844
Записей в блоге: 2
19.11.2015, 09:20
Цитата Сообщение от Shamil1 Посмотреть сообщение
сортируйте по косинусу угла
Хотя в 3D это может не иметь смысла
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
24.11.2015, 02:13
Цитата Сообщение от Shamil1 Посмотреть сообщение
сортируйте по косинусу угла
проще по тангенсу - это отношение разницы абсцисс и ординат двух точек
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
24.11.2015, 02:42
Цитата Сообщение от vlisp Посмотреть сообщение
проще по тангенсу - это отношение разницы абсцисс и ординат двух точек
по тангенсу нельзя
во-первых, он не определён для пи/2
во-вторых, он не является монотонной функцией на отрезке [0, пи]
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
24.11.2015, 15:10
Угол между точками равен
Цитата Сообщение от Shamil1 Посмотреть сообщение
по тангенсу нельзя
во-первых, он не определён для пи/2
во-вторых, он не является монотонной функцией на отрезке [0, пи]
Что делать, если угол лежит в нижней полусфере [pi, 2pi]?
Во многих языках есть встроенная функция atan2, в лиспе функция tan может принимать 2 аргумента. Диапазон значений [-pi pi] - это уже целая окружность, все что нужно сделать - посчитать разности абсцисс и ординат точек.

Чтобы посчитать косинус, нужно сначала посчитать корень, потом посчитать косинус...
Чтобы посчитать тангенс, нужно посчитать тангенс
Вычисление корня и тригонометрических функций - это по сути вычисление рядов.
В случае с косинусом программа на большом количестве точек просядет в скорости
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
24.11.2015, 19:34
Цитата Сообщение от vlisp Посмотреть сообщение
Что делать, если угол лежит в нижней полусфере [pi, 2pi]?
Угол не может лежать в нижней полусфере. (по условию задачи)

Цитата Сообщение от vlisp Посмотреть сообщение
Вычисление корня и тригонометрических функций - это по сути вычисление рядов.
По моему опыту вычисление корня занимает примерно столько же времени, сколько деление. И в два раза меньше времени, чем непредсказуемое ветвление.
(но если Вы принципиально против корней, то от них можно легко избавиться, домножив на abs(cos))

Цитата Сообщение от vlisp Посмотреть сообщение
Диапазон значений [-pi pi] - это уже целая окружность, все что нужно сделать - посчитать разности абсцисс и ординат точек.
Не совсем понял, что это значит. Но если Вы предлагаете сначала вычислять и сравнивать квадранты, то см. выше про непредсказуемое ветвление.
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
24.11.2015, 20:41
Цитата Сообщение от Shamil1 Посмотреть сообщение
Угол не может лежать в нижней полусфере. (по условию задачи)
Где это написано?
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
24.11.2015, 21:31
в условии:
Цитата Сообщение от nexs Посмотреть сообщение
относительно нижней-левой точки
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
24.11.2015, 23:37
Цитата Сообщение от Shamil1 Посмотреть сообщение
относительно нижней-левой точки
ах, ну, да... если квадрат повернуть на 45 градусов, где будет левая нижняя точка? А если точка будет в нижнем левом углу, чему будет равен синус???
От условия тут не избавиться в любом случае, поэтому лучше делить разность на разность, чем разность на сумму квадратов разностей...
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
25.11.2015, 00:26
Цитата Сообщение от vlisp Посмотреть сообщение
ах, ну, да... если квадрат повернуть на 45 градусов, где будет левая нижняя точка?
внизу
только не "левая нижняя", как Вы пишете, а "нижняя-левая", как в условии.

Цитата Сообщение от vlisp Посмотреть сообщение
А если точка будет в нижнем левом углу, чему будет равен синус???
не понял, если квадрат повернуть на 45%, то какой угол можно назвать "нижним левым"?
точка будет внизу, а синус нас не интересует, так как не используется в алгоритме

Цитата Сообщение от vlisp Посмотреть сообщение
От условия тут не избавиться в любом случае
так как началом луча будет точка, ниже которой нет в группе, то все лучи будут в верхней полуплоскости
и на данной области функция cos везде определена и монотонна
поэтому не требуется проверки дополнительных условий
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
25.11.2015, 00:51
Цитата Сообщение от Shamil1 Посмотреть сообщение
не понял, если квадрат повернуть на 45%, то какой угол можно назвать "нижним левым"?
Вот и я о том же, неточность в определении порождает ошибочные алгоритмы...
Если речь идет о прямоугольнике ограничивающем точки, то в нижнем левом углу может не быть ни одной точки, а может и быть и не одна... Например параллелограм или все точки имеющие одинаковые координаты. В таком случае расстояние до точки из угла равно нулю и косинус не посчитать, так что нужно делать проверку...
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
25.11.2015, 01:49
Цитата Сообщение от vlisp Посмотреть сообщение
Вот и я о том же
а я о другом
я не знаю, какой угол будет "нижним левым", а "нижнюю-левую" точку назову легко (я и назвал), так что никакой неточности в ней нет

Цитата Сообщение от vlisp Посмотреть сообщение
Если речь идет о прямоугольнике ограничивающем точки, то в нижнем левом углу может не быть ни одной точки, а может и быть и не одна...
возьмите описание любого алгоритма, используещего подобные углы
например, алгоритм Джарвиса для вычисления выпуклой оболочки:
"В качестве начальной берётся самая левая нижняя точка"
то есть, это устоявшийся термин
левая нижняя точка - это самая левая точка, а если таких несколько, то самая нижняя из них

Цитата Сообщение от vlisp Посмотреть сообщение
В таком случае расстояние до точки из угла равно нулю и косинус не посчитать
если "нижних левых" точек несколько, то это выяснится на этапе вычисления нижней левой точки
да, на этом этапе без сравнения не обойтись, но этот этап имеет меньшую сложность = O(n)
и на этом этапе мы косинусы не вычисляем, так что никаких проблем с вычислением косинуса не будет
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
25.11.2015, 02:30
Цитата Сообщение от Shamil1 Посмотреть сообщение
это выяснится на этапе вычисления нижней левой точки
Точно так же можно отфильтровать точки, которые дают деление на ноль при вычислении тангенса
Цитата Сообщение от Shamil1 Посмотреть сообщение
я не знаю, какой угол будет "нижним левым", а "нижнюю-левую" точку назову легко (я и назвал), так что никакой неточности в ней нет
Точка, ниже которой нет других точек, хоть и самая нижняя, не необязательно самая левая, то, есть она может входить в исходное множество, а может и не входить, чтоб это проверить, нужно сравнивать и x и y, каждой точки с минимальными значениями, чтоб не получить деление на ноль. В моем случае достаточно проверить только значение x, чтоб не получить значение на ноль
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
25.11.2015, 03:40
Цитата Сообщение от vlisp Посмотреть сообщение
Точно так же можно отфильтровать точки, которые дают деление на ноль при вычислении тангенса
во-первых, нельзя, если числа не целые
во-вторых, даже если целые, то точно так же не получится. как минимум, понадобится ещё один проход. и потом их придётся вставлять в середину отсортированного массива, что неудобно.
в-третьих, даже если мы согласимся на такое бессмысленное усложнение алгоритма, всё-равно придётся высчитывать, в какой квадрат точка попадает, так рост тангенса не гарантирует рост угла

Цитата Сообщение от vlisp Посмотреть сообщение
Точка, ниже которой нет других точек, хоть и самая нижняя, не необязательно самая левая, то, есть она может входить в исходное множество, а может и не входить
а нам и не надо, чтобы она была самой левой - прочитайте внимательно, что я написал
а в множество она входит по-определению - мы выбираем среди точек множества
если Вас не устраивает общепринятое толкование термина "нижняя левая точка множества", то спросите у ТС, что он имеет ввиду

Цитата Сообщение от vlisp Посмотреть сообщение
В моем случае достаточно проверить только значение x, чтоб не получить значение на ноль
недостаточно (если числа не целые)
можно получить переполнение, просто деля большое число на маленькое


vlisp,
Вы уже 3 раза меняли/дополняли свой алгоритм, а он всё не работает. Что Вы хотите доказать? Что, когда Вы, наконец, учтёте все ньюансы и составете работающий алгоритм, то он будет проще моего?

на всякий случай, напомню Вам, что является предметом дискуссии:
Цитата Сообщение от vlisp Посмотреть сообщение
проще по тангенсу
Вы по-прежнему утверждаете, что проще сортировать по тангенсу?
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,347
25.11.2015, 05:09
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы по-прежнему утверждаете, что проще сортировать по тангенсу?
Я так понимаю вы про это говорите? https://ru.wikipedia.org/wiki/Алгоритм_Джарвиса и ему подобные? Ну так там все написано, что тут обсуждать? Заморочили мне голову...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2015, 05:09
Помогаю со студенческими работами здесь

Даны три точки А,В,С, лежащие на одной прямой. Определить расположение точки С относительно луча АВ
Проверьте пожалуйста формулу для вычисления данной задачи, что не так? Даны три точки А,В,С, лежащие на одной прямой. Определить...

Повернуть точки на некоторый градус относительно первой точки
У нас есть два массива точек с координатами (x, y, z). Они обладают следующим условием - (рисунок 1) Они станут равны, если второй массив...

Заданы две точки (х1, у1), (х2, у2). Определить, лежат ли обе точки относительно заданной прямой в одной полуплоскости
Заданы две точки (х1, у1), (х2, у2) и прямая ax+by+c=0. Определить, лежат ли обе точки относительно прямой в одной полуплоскости. ...

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

Текст относительно точки
Рисую точки и подписи следующим образом g.FillEllipse(DotBrush, X1, Y1, 5, 5) g.DrawString("MyText", fnt, Brushes.Brown, X1,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru