
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.03.2005, 10:37
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
Привет всем!! Помогите сделать чё нить с этой задачей!?! --> Множество точек на плоскости назовём регулярным, если вместе с каждой парой различных точек оно содержит также ещё одну третью вершину правильного треугольника с вершинами в этих точках. Определить: регулярно ли заданное множество точек. Может кто такую делал случайно! Если есть исходник напишите плиззз!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.03.2005, 11:46
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
MagZzzПривет всем!! Помогите сделать чё нить с этой задачей!?! --> Множество точек на плоскости назовём регулярным, если вместе с каждой парой различных точек оно содержит также ещё одну третью вершину правильного треугольника с вершинами в этих точках. Определить: регулярно ли заданное множество точек. Может кто такую делал случайно! Если есть исходник напишите плиззз!! Блин, студенты!!! Думайте своей головой, а не лезьте в форумы. В конце концов преподы на то и есть, чтобы выяснять непонятные вопросы у них... По теме топика. Задача эта, ИМХО, должна решаться полным перебором вариантов. То есть: 0. Если точек меньше 3, то возвращаем сообщение, что множество не явлвется регулярным. 0'. Если точек ровно три, то необходимо провести анализ только один раз (т.е. выполнять п.п.7-9 в этом случае необязательно и даже вредно). 1. Берем одну из точек (произвольно) 2. Берем вторую точку из оставшихся (произвольно) 3. Пока есть точки для перебора 4. Берем любую точку из оставшихся (произвольно) 5. Проверяем на то, получился ли правильный треугольник 6. Если получился, то в переменную заносим признак "1", а если не получился, то заносим в переменную "-1" и выходим из процедуры с сообщением, что множество не является регулярным. 7. Если в переменной стоит признак "1", то запоминаем, что точку проверили и начинаем цикл (с п.3) с другой точкой. 8. Если нет точек для перебора, то очищаем занесенные признаки, и повторяем цикл с п.2 9. Если нет точек для перебора, то повторяем цикл с п.1 10. Если все прошло успешно и признак ="1", то объявляем множество регулярным. Сложность такого алгоритма характеризуется (без учета вычисления "правильности" треугольника) как О(n^3), что не позволяет обрабатывать большое число точек за приемлемое время. Скорее всего, программа загнется уже на первой тысяче точек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.03.2005, 12:09
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
Во первых огромное спасибо тебе Станислав, что хоть объяснил, что эта прога делать должна. Во вторых преподы бывают разные. Мне вот не повезло с преподом... А для чего форумы нужны?! Я думаю чтоб помогать людям в решении их вопросов!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.03.2005, 14:43
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
C(n,2), т.е. факториальная сложность. 1. Сложить точки в вектор. 2. Отсортировать лексикографически по x, y 3. Генерировать все возможные С(n,2) 0,1,2,3 0,1 0,2 0,3 1,2 1,3 2,3 4. Для каждой пары вычислить 2 вершины и искать эти вершины в векторе (я бы искал двоичным поиском). Если хотя бы одна найдена, то продолжить, если не найдена ни одна - выход с сообщением о нерегулярности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.03.2005, 15:06
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
niknameC(n,2), т.е. факториальная сложность. 1. Сложить точки в вектор. 2. Отсортировать лексикографически по x, y 3. Генерировать все возможные С(n,2) 0,1,2,3 0,1 0,2 0,3 1,2 1,3 2,3 4. Для каждой пары вычислить 2 вершины и искать эти вершины в векторе (я бы искал двоичным поиском). Если хотя бы одна найдена, то продолжить, если не найдена ни одна - выход с сообщением о нерегулярности. Да, немного неверно я понял задание - позор на мою седую голову! А вот у nickname понимание верное (см.п.4) Конечно, можно соответствующим образом модифицировать мой алгоритм...(а где и как - вопрос для студента MagZzz ) Кстати, необходимо еще выяснить у постановщика задачи, какими могут быть координаты точек на плоскости - целочисленными или веществеными (дробными) и, если дробными, то с какой точностью (сколько знаков после запятой) необходимо отрабатывать . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.03.2005, 15:31
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
typedef struct MyPoint{ float x; float y; MyPoint(float xx, float yy):x(xx),y(yy){} }MyPoint; bool MyPointLess(const MyPoint &l, const MyPoint &r) { if ( l.x<r.x || ( l.x=r.x && l.y<r.y)) return true; return false; } bool MyPointLessSoft(const MyPoint &l, const MyPoint &r) { float delta = 0.0001 if ( l.x<r.x || ( abs(l.x-r.x)<delta && l.y<r.y)) return true; return false; } void CalcTriangle(const MyPoint &l, const MyPoint &r, MyPoint &v1, MyPoint &v2) { рассчитывает две вершины v1 и v2 } ... vector<MyPoint> v; наполняете точками sort(v.begin(),v.end(),MyPointLess); .... int vSize = v.size(); for(int i = 0; i < vSize; i++) for(int j = i+1; j<vSize; j++){ MyPoint p1,p2; bool isRegular = false; CalcTriangle(v ,v[j],p1,p2); if ( binary_search(v.begin(),v.end(),v1,MyPointLessSoft)) continue; if ( binary_search(v.begin(),v.end(),v2,MyPointLessSoft)) continue; return NOT_REGULAR; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.03.2005, 12:59
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
Да... Таким студентам, как я до этого ещё далеко наверно, ну что же будем учиться. Спасибо вам пацаны за инфу, вы помогли сдвинуться с мёртвой точки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.03.2005, 16:18
|
|||
|---|---|---|---|
|
|||
Регулярно ли заданное множество точек?! |
|||
|
#18+
Я уже даже не бык, юноша, а пацаном я был тогда, когда ваши родители только знакомились в детском саду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2033546]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 477ms |

| 0 / 0 |
