Треугольник с заданными вершинами, обход по часовой стрелке |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Треугольник с заданными вершинами, обход по часовой стрелке |
wilin |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
Здравствуйте, дорогие форумчане!
Очень надеюсь на вашу помощь, поскольку сама измучалась предположениями. Условие задачи таковое: Заданы координаты треугольника. Вывести их в порядке обхода по часовой стрелке Как-то после прочтения условия мне показалось, что можно вычислить расстояние от точки до начала координат, потом найти угол поворота между тем отрезкой с расстоянием. А потом сортировать по принципу - у кого больше угол, да еще и больше длина отрезка, тот первый, у кого поменьше - второй и т.д. Правильно ли я мыслю, или в этом алгоритме есть подводные камни? Поделить, пожалуйста, своими мыслями. Буду рада и решению Но пуще - наводке. |
compiler |
Сообщение
#2
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
я думаю, что вместо начала координат, надо взять центр триугольника....
-------------------- Спасибо!
Удачи! |
klem4 |
Сообщение
#3
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Ход мыслей верный, только мне кажется длина отрезка будет не причем. Надо мерить угол между прямой
проходящей через точки (0.0) - (вершина.х, вершина.у) и осью ОХ вот и все. Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
wilin |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
Спасибо за ответы Как поможет в этом деле центр треугольника, я не поняла
Угол найти через теорему косинусов и прочее? |
volvo |
Сообщение
#5
|
Гость |
Цитата вот и все. Антипример: (для точек A и B твой алгоритм сбоит) Эскизы прикрепленных изображений |
compiler |
Сообщение
#6
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Антипример: я уже нарисовал и хотел выкладывать такую картинку , правда у меня точка С повыше Сообщение отредактировано: compiler - -------------------- Спасибо!
Удачи! |
wilin |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
и в этом случае вычислять расстояние?
|
klem4 |
Сообщение
#8
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
а если просто выводить точки по увеличению координаты Х, а если у 2-х точек они равны, первой выводить ту у которой координата Y -меньше ?
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#9
|
Гость |
wilin, проще всего будет найти координаты центра тяжести треугольника (эта точка всегда должна находиться внутри треугольника, если я не ошибаюсь), а уж потом выводить вершины в порядке возрастания угла между осью OX и линией, соединяющей центр тяжести и вершину...
|
wilin |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
Ребята, я застопорилась
Цитата а если просто выводить точки по увеличению координаты Х, а если у 2-х точек они равны, первой выводить ту у которой координата Y -меньше ? так не смогла... С сортировкой у меня проблемы Не может ли кто-нибудь привести точный алгоритм? Попробовала так... Ввела в массив значения от arctg(yi/xi). Сделала ее сортировку по возрастанию. Потом хотела сделать так, чтобы проверялось, нет ли одинаковых значений у соседних параметров. Но... Не знаю, как это реализовать - все перемешалось, так что определить, кому какие коорднаты принадлежат, я не могу. |
compiler |
Сообщение
#11
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
и в этом случае вычислять расстояние? ну, коль хочешь через теорему косинусов, то... 1) ищешь координаты центра(тяжести?) трИугольника (О). 2) Рассматриваешь треугольник ОВD(ВD перпендикуляр) 2.1) Находишь катеты DО и ВD(по координатам) 2.2)По теореме косинусов находишь угол ВОD... 3)Сравниваешь углы... сколько тут уже написали... Сообщение отредактировано: compiler - Эскизы прикрепленных изображений -------------------- Спасибо!
Удачи! |
wilin |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
А как найти координаты центра тяжести плоского треугольника, если мне не заданы веса точек?
|
volvo |
Сообщение
#13
|
Гость |
Считай веса одинаковыми, например, единичными...
|
klem4 |
Сообщение
#14
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
мой последний вариант крайне не верен
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
wilin |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
klem4, почему?
извините за тупой вопрос, но как проще вывести числа в порядке возрастания? |
klem4 |
Сообщение
#16
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
потому что возможен вариант, при котором более "правая" точка должна выводиться раньше более "левой" например (5, 4) (2, 4) (3, 1) Сейчас есть одна мысль, если сделаю - выложу .. Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
wilin |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
пока сделала так...
|
volvo |
Сообщение
#18
|
Гость |
wilin, ты немного не то печатаешь... Надо распечатать координаты точек, а не углы:
triang.pas ( 752 байт ) Кол-во скачиваний: 542 |
Lapp |
Сообщение
#19
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Насколько я понимаю, нужно использовать вектора сторон. Ход рассуждения примерно такой..
1. Находим координаты векторов АВ и ВС. 2. Вычисляем их векторное произведение (точнее, одну его компоненту, которая перпендикулярна плоскости - остальные все равно нулевые). 3. Если оно положительно, то обход А-В-С по часовой стрелке, если отрицательное - то против. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
wilin |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: 0 |
Ребята, спасибо всем большое за помощь! Увидела множество идей, отзывчивость и готовность помочь человеку
Добавлено через 3 мин. Репутацию повысить я пока, увы, не могу, посему придется выслушать только большое человеческое спасибо! |
Текстовая версия | 23.12.2024 20:01 |