Многоугольники, Построение многоугольника |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Многоугольники, Построение многоугольника |
kumino |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 1 |
Пользователь вводит число сторон. Надо построить многоугольник с длинами сторон, которые тоже вводит пользователь. Задача не олимпиадная, но интересная.
|
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Пользователь вводит число сторон. Надо построить многоугольник с длинами сторон, которые тоже вводит пользователь. Задача не олимпиадная, но интересная. Согласен, задача интересная. Какие у тебя мысли по поводу решения? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
kumino |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 1 |
Может, что-то связанное с пропорциональным делением суммы углов.Не знаю.
|
TarasBer |
Сообщение
#4
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ну, во-первых, надо, чтобы самая длинная сторона A была меньше суммы остальных.
Остальные стороны разбей на 2 набора B и C так, чтобы разность их длины была меньше, чем длина наибольшей стороны (ну типа просто сначала в один набор засунь всё, потом в другой переноси по одному элементу, пока разница не станет меньше длины наибольшей стороны). А теперь строй треугольник со сторонами длиной A, B и C. -------------------- |
kumino |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 1 |
Ну, во-первых, надо, чтобы самая длинная сторона A была меньше суммы остальных. Остальные стороны разбей на 2 набора B и C так, чтобы разность их длины была меньше, чем длина наибольшей стороны (ну типа просто сначала в один набор засунь всё, потом в другой переноси по одному элементу, пока разница не станет меньше длины наибольшей стороны). А теперь строй треугольник со сторонами длиной A, B и C. Прикольная идея! А если введено n сторон, а у фигуры должно быть тоже n сторон? |
TarasBer |
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Дык а это и есть эн сторон. Просто некоторые из них продолжают друг друга.
-------------------- |
kumino |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: 1 |
Ладно, скажу так: ни одна сторона не должна продолжать другую.
|
Lapp |
Сообщение
#8
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я не просто так сказал в начале, задача действительно интересная. Жаль только руки все не доходили до нее..
Интересная она как раз своей неоднозначностью. Если в задаче один ответ - обычно, проблем нет )). Я имею в виду проблемы выбора . А тут, вроде, сразу понятно, что ответов бесконечное количество (причем, мощности континуума, да еще и многомерного)). Но начинаешь решать - упираешься в какие-то странные трудности - какую именно форму выбрать и почему? И надо сказать, что вот это: Ладно, скажу так: ни одна сторона не должна продолжать другую. - практически не уменьшает проблем..Поэтому я советую сразу себя ограничить . Если сказать себе: построить многоугольник, вписанный в окружность - все неоднозначности улетучиваются, и остается только сделать построение. Приведенный ниже код это делает. Для поиска радиуса описанной окружности решаем уравнение: a1 + ... + an = 360o , где ai есть угол из центра окружности, опирающийся на i-ю сторону. Углы можно вычислять как удвоенные (добавлено позже) арксинусы отношения половины длины стороны к искомому радиусу (в Паскале, конечно, приходится через арктангенс). В нем единственная неизвестная величина - радиус. Решаю я его обычной дихотомией (вряд ли тут нужен более эффективный метод). А собственно построение - это просто расстановка точек на окружности под нужными углами. uses Graph; -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
Сообщение
#9
|
Гость |
Спасибо.
|
Текстовая версия | 27.04.2024 5:55 |