![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Всем привет.
Этот код генерирует случайный многоугольник
Проблема в том, что генерируемый многоугольник получается вырожденным, т.е. его стороны могут накладываться, пересекать друг друга. Естественно, причина этого ясна. Помогите, пожалуйста, придумать алгоритм случайной генерации координат вершин так, чтобы всегда получался правильный многоугольник. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Не понятно что именно тебе нужно, но в гугле полно информации об этом:
http://www.google.ru/#hl=ru&newwindow=...84cf5687479d375 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Приведённый мной код может сгенерить фигню, а не многоугольник, потому что координаты его вершин получаются случайным образом - стороны могу быть наложенными друг на друга.
Т.е. в силу случайности вершин многоугольник почти всегда вырожденный - обладает самопересечением. Я прошу подсказать мне способ случайной генерации многоугольника, гарантирующий отсутствие самопересечений. |
|||
|
||||
| Zakhar_Shan |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.6.2007 Где: Тюмень Репутация: 1 Всего: 2 |
Времени нет разбираться и писать все как есть, сталкивался как то с похожей задачей, использовал полярные координаты. Если чет то сдесь про них написано. выбираешь центром центр своей клиентской области, затем циклом (где число повторений = числу твоих вершин) задаешь радиус окружности (если ты хочешь чтоб точки были одинаково отдалены от центра, то бери радиус везде одинаковый), и прибавляешь рендомом угол (только смотри за 360 не выползи). Перевод из полярных в декартовы помоему: x = r*cos(a) y = r*sin(a) где: r- радиус a - твой угол И вот тебе все готово. Осталось подумать только как суммы по прибавлению угла распределить. |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Спасибо!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |