Поиск:

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


Новичок



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

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



Задан произвольный n-угольник через массив точек(x,y) с обходом против часовой стрелки

Нужно написать алгоритм, опреляющий для любой точки - является ли эта точка выпуклостью многоугольника
PM MAIL   Вверх
Akina
Дата 10.9.2010, 20:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



 smile Что такое "выпуклость многоугольника"?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
loster
Дата 10.9.2010, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну может не совсем правильно выразился. Имеется ввиду следующее:
Если внутренние углы при всех вершинах многоугольника меньше 180 градусов, то такой многоугольник называется выпуклым
Выпуклость соответсвенно - вершина при которой угол меньше 180 градусов

user posted image
на рисунке многоугольник, все вершины кроме одной - выпуклые

Мне дан массив точек многоугольника, надо выяснить какие из них являются выпуклостями а какие нет.
Долго думал, но так и не нашёл путь к постороению алгоритма  smile 
PM MAIL   Вверх
Akina
Дата 10.9.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Закрасить. Если угол с крашеной стороны меньше - выпуклость, иначе впуклость.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
loster
Дата 10.9.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм, а как высчитать угол, если у меня есть координаты?

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

upd вспомнил, что угол можно найти через векторное произведение, буду пробовать)

Это сообщение отредактировал(а) loster - 11.9.2010, 00:10
PM MAIL   Вверх
nmn
Дата 11.9.2010, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

если многоугольник без самопересечений, то точки принадлежащие многоугольнику будут по одну сторону от границ при данном направлении обхода, вот тут можно и скалярное произведение векторов применять

Добавлено через 5 минут и 39 секунд
в самопересекающемся, область многоугольника можно так же задать положением относительно границ, тут только при пересечении границы будет меняться расположение области многоугольника на противоположное
PM Skype   Вверх
W4FhLF
Дата 11.9.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Ну у тебя есть два отрезка с общей точкой, угол в которой и требуется определить. 

Задача решена здесь: http://irodov.nm.ru/cgi-bin/ikonboard/topi...=7&topic=33

Код:

Код

bool IsSharp(POINT P0,POINT P1,POINT P2) 
{ 
     __int64 Xa,Ya,Xc,Yc; 
      
     Xa=P2.x - P1.x; 
     Ya=P2.y - P1.y; 
     Xc=P0.x - P1.x; 
     Yc=P0.y - P1.y; 

     float Ang; 
     Ang=((Xa*Yc-Xc*Ya)/(sqrt(Xa*Xa+Ya*Ya)*sqrt(Xc*Xc+Yc*Yc))); 
    
     if (Ang>0) return false; 
     else return true; 
}



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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