|
|
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Запрограммировать на Pascal: Дано N точек на плоскости. Найти четырехугольник с вершинами в заданных точках, содержащий наибольшее число заданных точек. Подскажите, пожалуйста, алгоритм решения, выскажите свои мысли по поводу возможного способа решения данной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 19:56 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Генерировать сочетания из N по 4. (алгоритм генерации сочетаний) Для каждой четверки: 1)Проверить прямоугольник на невырожденность 2)Подсчитать количество прочих N-4 точек внутри (алгоритм проверки попадания точки в полигон или в два треугольника) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 20:29 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Общий алгоритм решения более менее ясен. Больше всего пока непонятно вот что: По какому алгоритму проверять принадлежность точки четырехугольнику. Сначала хотел сравнивать расстояние, т.е. взять центр четырехугольника и точку на какой-нибудь его линии, узнать расстояние от центра до точки пересечения с этой линией и далее брать следующую точку (уже не на линии), опять высчитать до нее расстояние и сравнивать эти два расстояния. Если расстояние от центра до точки меньше чем от центра до точки пересечения с прямой – значит, точка принадлежит четырехугольнику. Но проблема в том, что рассматривается четырехугольник и для него такой алгоритм не подходит (для ромба или куба, должен был подойти), т.к. расстояние от центра четырехугольника до каждой линии четырехугольника может различаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 22:38 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Ты можешь проверят как попадание в один из двух треугольников, образующих четырехугольник, или использовать один из стандартных алгоритмов отсечения (см. компьютерная графика, там это описано(отсечение точек прямыми)) ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 23:22 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
2 Andrew07 >По какому алгоритму проверять принадлежность точки четырехугольнику. Есть книга: Шеймос, Персепрата "Вычислительная геометрия" (фамилии авторов мог слегка переврать). Там этот алгоритм имеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 00:56 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Представь что четырехугольник - это 4 вектора V(4). Причем конец каждого вектора смотрит в начало следующего. Направление обхода - против часовой стрелки. Для каждого вектора V: 1) Вычислить вектор U начало которого совпадает с V а конец с искомой точкой. 2) Векторное произведение (U,V) должно быть положитным для всех четырех случаев. Если оно отрицательно, значит точка по правую сторону от вектора V. То есть НЕ ПРИНАДЛЕЖИТ четырехугольнику. Эту формулу можно использовать для любых многоугольников без самопересечений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2004, 21:09 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Нет Mayton этот алгоритм неверен (или я что-то не так считаю?). Смотри T1(0,0) T2(0,2) T(2,2) T4(2,0) T5(0,1) Образован четырехугольник T1-T4-T3-T2-T1 T5 лежит на стороне T2-T1, т.е. принадлежит фигуре. Векторное произведение T1T5 и T1T4 дает –(минус) 2 не верно. Это один из примеров, когда алгоритм не работает. Даже, если брать точку внутри четырехугольника, а не на стороне, можно взять такие координаты, что по данному алгоритму будет выдано, что точка не принадлежит четырехугольнику. Вот так…. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 13:24 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Да. Ты прав. Дело в том, что я забыл упомянуть о том что этот алгоритм работает для выпуклых многоугольников. А если многоугульник вогнутый то можно его разбить на несколько выпуклых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 09:49 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Ладно, ничего страшного. Два дня, правда, вылетели попусту. А так ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 22:33 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Mayton а почему векторное произведение вычисляется? По логике вещей там скалярное должно быть. А алгоритм хорош... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2008, 17:06 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
MargekMayton а почему векторное произведение вычисляется? По логике вещей там скалярное должно быть. А алгоритм хорош... По какой логике? Поясни, почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2008, 17:25 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
Хмм я чуток так подумал, если нужен способ найти принадлежит ли точка многоугольнику каторый работает и для невыпуклых прямоугольников то можно сделать так? 1. перекинуть начало отчета в любую точку. 2. перебрать все возможные комбинации треугольников, где одна из вершин начало кординат 3. построить прямую через искомую точку паралельно тем двум оставимся. 4. найти расстояние между прямыми и началом кординат (привести к каноноческому виду вроде так называеться) 5. найти углы какие имеют точки относительно нач коорд. 6. если расстояние искомой точки найденой из пункта 4 по знаку одинаково и меньше чем для двух остльных, затем если угол искомой находиться между этими двумя то точка внутри треугольника, из каторого состоит искомая фигура зы. На вид сложновато, но думаю математически там будет не сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2008, 02:21 |
|
||
|
Четырехугольник
|
|||
|---|---|---|---|
|
#18+
РенатХмм я чуток так подумал, если нужен способ найти принадлежит ли точка многоугольнику каторый работает и для невыпуклых прямоугольников то можно сделать так? 1. перекинуть начало отчета в любую точку. 2. перебрать все возможные комбинации треугольников, где одна из вершин начало кординат 3. построить прямую через искомую точку паралельно тем двум оставимся. 4. найти расстояние между прямыми и началом кординат (привести к каноноческому виду вроде так называеться) 5. найти углы какие имеют точки относительно нач коорд. 6. если расстояние искомой точки найденой из пункта 4 по знаку одинаково и меньше чем для двух остльных, затем если угол искомой находиться между этими двумя то точка внутри треугольника, из каторого состоит искомая фигура Когда речь идёт о комбинациях, в алгоритм вводится "комбинаторная" сложность. Это значит, что время работы алгоритма зависит не линейно а факториально от количества исходных данных. В данном случае, это будет количество вершин твоего многоугольника. Грубо говоря, для большого количества вершин (10-20) можно спокойно отправляться курить или пить кофе (или спать), пока твой алгоритм закончит работу (для проверки одной точки). Для проверок углов ты будешь использовать сложные формулы тригонметрии, хотя тебе дан в руки аппарат, который называется "векторная алгебра". Суть твоих проверок сводится к определению следующего - "как лежит точка относительно прямой (отрезка или луча)". Я это делаю перемножением векторов. Знак векторного произведения даст тебе ориентацию точки относительно прямой. Векторное произведение вычисляется мгновенно и не имеет побочных эффектов, типа "области допустимых значений", периодичности для функций семейства arc*, которые ты обязательно впихнёшь. Почитай также алгоритм Метод Трассировки Луча у Ласло. Подходит для невыпуклых многоугольников. Если полигон состоит из большого количества вершин, и точек очень много (порядка 1000 и более), его можно индексировать. Я-бы предложил разбить его на трапеции, с основанием, параллельным оси X (или Y) и проверять попадение точки в соотв. Трапецию. Поиск трапеций можно выполнять дихотомически. Это позволит уйти от факториальной сложности к логарифмической (только во время проверки естесственно). Почитай 1. Ласло, "Вычислительная геометрия и компьютерная графика на С++" 2. Шикин, Боресков "Компьютерная графика и полигональные модели". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2008, 11:50 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=133&tid=1344887]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 197ms |
| total: | 373ms |

| 0 / 0 |
