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