Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "правильный" многоугольник 
:(
    Опции темы
Riddik
Дата 29.8.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Всем привет.

Этот код генерирует случайный многоугольник

Код

struct PLOT
{
    int x;
    int y;
};

const int N_Vertecs=10;

int WIDTH=800;   //ширина клиентской области
int HEIGHT=600;  //высота клиентской области

PLOT plot[N_Vertecs];

for(int i=0; i<N_Vertecs; i++)
{ 
    plot[i].x=rand()%WIDTH;
    plot[i].y=rand()%HEIGHT;
}

DrawPolygon(plot, N_Vertecs);  /*эта функция принимает адрес массива PLOT-элементов и число элементов в этом массиве, похожа на GDI функцию Polygon()*/
//Она соединяет линиями вершины, координаты которых заданы в структуре PLOT


Проблема в том, что генерируемый многоугольник получается вырожденным, т.е. его стороны могут накладываться, пересекать друг друга. 
Естественно, причина этого ясна.

Помогите, пожалуйста, придумать алгоритм случайной генерации координат вершин так, чтобы всегда получался правильный многоугольник.
PM MAIL   Вверх
andrew_121
Дата 29.8.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Не понятно что именно тебе нужно, но в гугле полно информации об этом:
http://www.google.ru/#hl=ru&newwindow=...84cf5687479d375


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Riddik
Дата 29.8.2009, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Приведённый мной код может сгенерить фигню, а не многоугольник, потому что координаты его вершин получаются случайным образом - стороны могу быть наложенными друг на друга.

Т.е. в силу случайности вершин многоугольник почти всегда вырожденный - обладает самопересечением.

Я прошу подсказать мне способ случайной генерации многоугольника, гарантирующий отсутствие самопересечений.
PM MAIL   Вверх
Zakhar_Shan
Дата 30.8.2009, 14:16 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(Riddik @  29.8.2009,  01:39 Найти цитируемый пост)
Я прошу подсказать мне способ случайной генерации многоугольника, гарантирующий отсутствие самопересечений. 


Времени нет разбираться и писать все как есть, сталкивался как то с похожей задачей, использовал полярные координаты. 
Если чет то сдесь про них написано.
выбираешь центром центр своей клиентской области, затем циклом (где число повторений = числу твоих вершин) задаешь радиус окружности (если ты хочешь чтоб точки были одинаково отдалены от центра, то бери радиус везде одинаковый), и прибавляешь рендомом угол (только смотри за 360 не выползи).
Перевод из полярных в декартовы помоему:
x = r*cos(a)
y = r*sin(a)
где: r- радиус
        a - твой угол
И вот тебе все готово.
Осталось подумать только как суммы по прибавлению угла распределить. 
PM MAIL   Вверх
Riddik
Дата 6.9.2009, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.