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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2018, 11:35   #1
helu
 
Регистрация: 02.10.2018
Сообщений: 9
По умолчанию Язык Си

Многоугольник задан целочисленными координатами x1,y1,x2,y2,xn,yn ,нужно проверить его на выпуклость и самопересечение.Как это сделать с помощью векторов?
helu вне форума Ответить с цитированием
Старый 08.10.2018, 11:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Открыть школьный учебник геометрии и выписать формулы.
p51x вне форума Ответить с цитированием
Старый 08.10.2018, 14:35   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Не все так просто. Насколько я в курсе, школьное образование сейчас идет к максимальному упрощению. Для отверточного производства интегралы не нужны.
Я бы для каждой прямой (в цикле от 1 до n ) проверял бы - все остальные точки по одну ли сторону ? А насчет самопересечения - так сразу и не скажу, бошку включать надо или у дяди Гуголя спрашивать. Одно видится точно - если выпуклый, то нет самоп.-я. В общем, это что-то из геодезии.
Так что стоило бы помочь человеку - не кодом, а хотя бы советом и пинком в нужном направлении.

Последний раз редактировалось digitalis; 08.10.2018 в 14:39.
digitalis вне форума Ответить с цитированием
Старый 08.10.2018, 14:45   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Я бы для каждой прямой (в цикле от 1 до n ) проверял бы - все остальные точки по одну ли сторону ?
А если стандартно? Многоугольник будет выпуклым, если в каждой тройке последовательных вершин поворот в одну и туже сторону. Он будет определяться знаком выражения a.x * b.y - a.y * b.x. А вот теперь для каждых трех вершин (внимательно на концах массива вершин) ...

Цитата:
Сообщение от digitalis Посмотреть сообщение
А насчет самопересечения - так сразу и не скажу, бошку включать надо или у дяди Гуголя спрашивать.
Та ладно. По тупому: самопересечение будет, если найдется еще хоть одна точка пересечения кроме "концевых" соседей.
p51x вне форума Ответить с цитированием
Старый 08.10.2018, 14:58   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Ну вот, пошла конструктивная помощь А насчет самопересечения - так вроде в определении если самопер., то это уже и не многоугольник.
А мировая мысль в этом направлении не дремлет:
https://math.stackexchange.com/quest...f-intersection
digitalis вне форума Ответить с цитированием
Старый 08.10.2018, 15:02   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну тут как определять. В самом общем виде это фигура ограниченная ломанной...
p51x вне форума Ответить с цитированием
Старый 08.10.2018, 15:34   #7
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

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

Последний раз редактировалось NetSpace; 08.10.2018 в 15:36.
NetSpace на форуме Ответить с цитированием
Старый 08.10.2018, 15:36   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
по поводу выпуклости для двух пар точек определяй угол наклона. он должен либо всё время расти (идём по точкам против часовой стрелки) либо всё время уменьшаться( идём по часовой стрелке). если в какой-то момент угол начал расти в другую сторону, то фигура не выпуклая в этом месте.
Вы тему не читали?

Цитата:
Сообщение от NetSpace Посмотреть сообщение
а по поводу самопересечения - тут лучше использовать массив - и туда загнать координаты X и Y точек линий и потом сделать поиск по парам точек. если совпадут - значит, где-то пересекаются грани
А если пересекаются серединами?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
язык С карабах Фриланс 3 05.12.2017 21:21
Перевод кода c языка Pascale в язык PHP или в язык JavaScript Javlonka JavaScript, Ajax 1 30.09.2014 22:48
Язык С s2df Помощь студентам 4 01.11.2013 10:57
Язык С anka1234 Помощь студентам 0 15.12.2012 21:54
Язык С++ nes@ Помощь студентам 0 13.05.2010 21:18