Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2017, 00:40   #1
new_programmer_
Новичок
Джуниор
 
Регистрация: 01.04.2017
Сообщений: 4
По умолчанию Построить по 3 точкам правильный шестиугольник минимального размера - C++

Доброго времени суток. Большая просьба помочь с кодом.

Задача:
Даны координаты 3 точек в двумерной плоскости.
Необходимо найти координаты точек выпуклого шестиугольника (в идеале многоугольника с любым количеством вершин) таким образом, чтобы эти 3 точки принадлежали сторонам шестиугольника или были его вершинами.

Главное условие, чтобы шестиугольник в итоге был минимального размера (с минимальной площадью или описанной окружностью ...)

Такой шестиугольник возможно существует не на всех комбинациях 3 точек и это нормально, один из ответов функции в программе должен об этом сообщить.
Меня интересуют те случаи, когда его построить возможно.

Над алгоритмом я сейчас размышляю. Однозначной идеи пока нет.
Рассматриваю вариант, когда 2 точки лежат на одной стороне шестиугольника.
Можно построить отрезок по третьей точке, параллельный первому и такой же длины. Эти 2 отрезка будут находиться на максимальном расстоянии друг от друга.

Исходя из полученных данных нужно достроить правильный шестиугольник.
Вопрос, как это кодом записать?
new_programmer_ вне форума Ответить с цитированием
Старый 02.04.2017, 04:57   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я не смогу тебе помощь с программированием, но я могу поделиться своими соображениями.
Тебе надо стремиться получить координаты центра шестигранника. Для этого проведи маленькие кружочки вокруг точек, которые будут одновременно расти:

0.jpg

когда же произойдёт соприкосновения этих кругов (может быть надо решить систему из 3-х уравнений, изображающих круги; или по чуть-чуть прибавлять в цикле и проверять условие сошлись ли круги в одной точке. Конечно, при последнем подходе решение будет приближенное), тогда и решение получится:

1.jpg

ну а зная центр, можно будет найти координаты остальных узлов.

___________________________________ ___________________________________ _______________________

Кстате, а что ты знаешь по С++?
Как ввести данные знаешь?
Или циклы тебе известны? (for...while....)
ura_111 вне форума Ответить с цитированием
Старый 02.04.2017, 09:24   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
ura_111
эти соображения только для проверки того, являются ли точки вершинами правильного шестиугольника. И только. А задача сводится к нахождению центра описанной окружности, радиуса этой окружности и угла поворота шестиугольника относительно оси oy например. Всего 4 неизвестных. И есть уравнения сторон, к некоторым из которых точки должны принадлежать. Причем не известно к каким. Решить и минимизировать по площади ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2017, 11:51   #4
new_programmer_
Новичок
Джуниор
 
Регистрация: 01.04.2017
Сообщений: 4
По умолчанию

Спасибо за подсказку с окружностями. Интересная идея.
Но это только частный случай, когда точки совпадают с вершинами.

Надо бы ещё рассмотреть ситуации, когда точки попадают на стороны правильного шестиугольника.

Да, все циклы и ввод знаю на C++.
new_programmer_ вне форума Ответить с цитированием
Старый 02.04.2017, 12:20   #5
new_programmer_
Новичок
Джуниор
 
Регистрация: 01.04.2017
Сообщений: 4
По умолчанию

Аватар, спасибо. В целом рассуждение верное.
Только не знаю как именно может помочь радиус

Можно поподробнее шаги расписать?
new_programmer_ вне форума Ответить с цитированием
Старый 02.04.2017, 12:59   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чего радиус не понятен? Правильный шестиугольник вписан в окружность, радиус и характеризует его размеры и площадь в общем-то. Т.е. именно радиус и минимизировать. Насчет существует ли для любых комбинаций - скорее существует, чем нет. Лень дальше разбираться ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.04.2017 в 13:01.
Аватар вне форума Ответить с цитированием
Старый 02.04.2017, 14:07   #7
new_programmer_
Новичок
Джуниор
 
Регистрация: 01.04.2017
Сообщений: 4
По умолчанию

В плане условия минимализации радиус понятен.
Я просто подумал конкретно о нахождении вершин многоугольника с его помощью
new_programmer_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать правильный шестиугольник, если известна координата одной из его вершин. Шестиугольник поворачива yuliya.al18 Помощь студентам 0 19.02.2017 14:56
как для построения отрезка по двум точкам на плоскости ХОУ и далее, из одного из концов построенного отрезка построить второй отре IZOPGRAM Общие вопросы Delphi 2 27.12.2012 09:28
построить изображение http://upwap.ru/912478 чёрные квадраты соответствуют высвечиваемым точкам mt92 Помощь студентам 0 15.06.2010 11:04
Построить графики по точкам из одного массива. Лурье Общие вопросы Delphi 2 15.05.2009 12:28