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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2008, 19:42   #1
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию Turbo Pascal. Задача на функции/процедуры

Даны 2 множества точек на плоскости. Выбрать 4 различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.

Задачу следует решать с использованием функций. Желательно также применить модули.

Примерный алгоритм решения:
1) Задаем 2 множества;
2) В первом множестве проверяем расположение точек на наличие квадрата:
а) Смежые стороны четырехугольника должны быть равными;
б) Диагонали четырехугольника должны быть равными.
Расстояние между точками: A12=sqrt(sqr(x2-x1)+sqr(y2-y1))
Если квадратов среди первого множества нет=>конец
3) Проверяем, накрывает ли квадрат все точки второго множества
P.S. Вот это я не знаю как сделать, тут просто сравнивать координаты вершин квадрата с координатами точки сложно: ведь этот квадрат может не строго лежать так, а быть повернуть, тогда что? Еще вопрос: накрывает ли квадрат точку, если она лежит на его стороне?
4)Находим площадь квадрата (как квадрат стороны) и сравниваем ее с площадью других получившихся квадратов, получаем искомый квадрат с минимальной площадью.
Manchester вне форума Ответить с цитированием
Старый 14.11.2008, 19:55   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Отлично! Предоставьте свой вариант решения задачи и укажите, какие у Вас возникли трудности. Мы поможем их разрешить.
Arigato вне форума Ответить с цитированием
Старый 14.11.2008, 20:06   #3
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Меня интересует пункт 3. Я не знаю как проверить содержание точек в найденном квадрате
Manchester вне форума Ответить с цитированием
Старый 14.11.2008, 20:32   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Если у нас есть квадрат (X1, Y1) - (X2, Y2), где X1 < X2, Y1 < Y2, то точка (X, Y) принадлежит этому квадрату, если:
X1 <= X <= X2
Y1 <= Y <= Y2
Arigato вне форума Ответить с цитированием
Старый 14.11.2008, 20:51   #5
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Это то итак понятно, а если квадрат не лежит так ■, а повернут ♦???
Manchester вне форума Ответить с цитированием
Старый 14.11.2008, 21:18   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Тогда необходимо произвести поворот системы координат так, что бы стороны квадрата оказались параллельными осям координат.
Arigato вне форума Ответить с цитированием
Старый 14.11.2008, 21:27   #7
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Ну это гемор. Можно найти расстояния между этой точкой и вершинами квадрата и сравнить каждое из них с длиной диагонали? Если все эти расстояния будут меньше дляны диагонали, то точка лежит в квадрате. Это верно?
Manchester вне форума Ответить с цитированием
Старый 14.11.2008, 21:53   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Нет, еcли у нас, например, ромб, то можно найти точку за его пределом, но расстояния будут меньше длинны диагонали.
Можно найти угол, который составляет сторона квадрата к оси ординат и произвести поворот осей на этот угол. Формулы поворота осей координат (если мне память не изменяет):
x1 = - x * sin (a) + y * cos (b);
y1 = x * cos (a) + y * sin (b);
Это общий вид формул, в нашем случае b = a.
Это надо проделать для всех точек, после чего получим обычный квадрат.
Arigato вне форума Ответить с цитированием
Старый 14.11.2008, 22:00   #9
Manchester
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 17
По умолчанию

Нет, ромб не может быть, я ж проверяю сначала расположение точек на квадрат. Еще вопрос: если точка второго множества лежит на стороне квадрата, то она считается содержащейся в квадрате?
Manchester вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции V25 Паскаль, Turbo Pascal, PascalABC.NET 1 17.11.2008 20:02
Процедуры и функции KulOle Паскаль, Turbo Pascal, PascalABC.NET 1 26.10.2008 14:18
помогите решить: 1 задача на множественный тип, 2 на файлы и процедуры и функции mpegable Паскаль, Turbo Pascal, PascalABC.NET 1 07.05.2008 18:17
Задача на Turbo Pascal W_P Помощь студентам 1 14.02.2008 18:24
Процедуры и функции 11111 Помощь студентам 10 26.11.2007 15:06