![]() |
|
|
![]()
|
|
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
Такая еще задача:
Жду хотя бы подсказки. Спасибо. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Ищешь минимальные и максимальные x и y координаты точек - это и будет твой прямоугольник...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
p0s0l
Уже сделал сегодня. Но всё равно спасибо. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
NiJazz
Так выложи решение. Мало ли кому понадобится еще. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
рискну предположить, что все не так просто это будет решением только в том случае, если есть условие параллельности сторон прямоугольника осям координат если же прямоугольник может быть ориентирован как угодно, то как минимум придется определиться со словом "наименьший", а то мне кажется, что для разных критериев будут разные результаты (в случае со сторонами, параллельными осям координат, похоже, результат получается для всех более-менее разумных критериев: площадь, периметр, диагональ, ...) в общем случае можно предложить что-нибудь в таком роде: 1. зафиксировать направление, которому будут параллельны/перпендикулярны стороны прямоугольника 2. решить задачу для фиксированных направлений (как было предложено) таким образом перебрать всевозможные направления и выбрать наилучшее -------------------- qqq |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
Среда: Turbo C++ 3
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
припоздал маленько...
-------------------- qqq |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
Не хватает такого кода:
Но тогда выдаёт ошибку "NULL poiter assignment". Возиться долго не стал, поэтому оставил всё как есть. Если подскажите, как грамотно сделать освобождение памяти, буду благодарен. Добавлено @ 17:57 maxim1000 Мысли очень правильные. Придётся это делать, если препод потребует. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 1 Всего: 18 |
Мне кажется, что maxim1000 прав: решение не так очевидно.
Например, следующие 4-е точки: (0,0),(4,6),(6,4),(10,10). Твое решение даст: (0,0) и (10,10) (еще две вершины: (10,0) и (0,10)). Но решением будет прямоугольник под углом 45 градусов к осям - примерно это (-1,1), (1,-1), (9,11) и (11,9). -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Ну если не паралельно осям, тогда можно модернизировать так:
1) ищем центр всех точек (это середина между min и max) 2) ищем точку, которая находится всех дальше от центра так мы выяснили угол поворота прямоугольника (alpha) 3) поворачиваем ось координат на угол alpha (вернее тут будет создан второй массив точек с измененными координатами) 4) теперь применяем первоначальный алгоритм (через min и max) на второй массив 5) результат поворачиваем на угол -alpha Это я объяснил чтобы понятнее было, но в деле лучше вместо 3-4-5 не создавать второй массив, а на ходу поворачивать каждую точку и проверять на min/max... Попробовал на простых примерах - вроде действует правильно... -------------------- С уважением, г-н Посол. |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
2NiJazz
А зачем каждую точку удаляешь то? Ты ж блок выделял! Блок и удаляй! |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
delete[] points; |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Для начала надо сузить поиск, построив окружающий многоугольник (получаемый попарным соединением точек аки вершин многоугольника) и отбросив лишние (внутренние) точки - кстати он будет заведомо выпуклым. После чего в принципе можно доказать, что при любом понимании слова "наименьший прямоугольник" (площадь, периметр, минимакс стороны и т.п.) одна из сторон описывающего многоугольника будет лежать на стороне у итогового прямоугольника. Остальное в принципе просто...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
да вот я тоже как-то думал доказать что-то подобное, только не очень получилось, особенно при любом понимании "наименьшего прямоугольника" я рассмотрел случай вершин равностороннего треугольника - может, я и ошибся, но в результате у меня получилось, что одна вершина треугольника совпадает с углом квадрата, а остальные - на двух его сторонах, не содержащих этот угол (критерий - площадь) -------------------- qqq |
|||
|
||||
| Unregistered |
|
||||
|
Unregistered |
А я вот попробовал проделать то же самое и получил противоположный результат Нарисовал равностононний треугольник со стороной a, зафиксировал его Совместил одну из вершин объемлющего прямоугольника с вершиной треугольника Остальные вершины прямоугольника стал двигать вокруг треугольника так, чтобы они касались его сторон И стал смотреть, какая при этом получится площадь Оказалось, что вершины этого прямоугольника двигаются по дугам окружностей с центрами в серединах сторон треугольника Движется по одной из дуг до тех пор, пока их стороны не совместятся, после чего начинает двигаться по другой дуге Площадь я считал 2 часа (sqrt(3)/4 + 1/2*cos(gamma))*a^2, где -pi/6<=gamma<=pi/6 Здесь граничные значения gamma соответствуют положению, когда стороны совмещены И видно, что минимум площади достигается при таких значениях Может, конечно, и я где-то ошибся |
||||
|
|||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |