|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.11.2008, 19:42 | #1 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Turbo Pascal. Задача на функции/процедуры
Даны 2 множества точек на плоскости. Выбрать 4 различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.
Задачу следует решать с использованием функций. Желательно также применить модули. Примерный алгоритм решения: 1) Задаем 2 множества; 2) В первом множестве проверяем расположение точек на наличие квадрата: а) Смежые стороны четырехугольника должны быть равными; б) Диагонали четырехугольника должны быть равными. Расстояние между точками: A12=sqrt(sqr(x2-x1)+sqr(y2-y1)) Если квадратов среди первого множества нет=>конец 3) Проверяем, накрывает ли квадрат все точки второго множества P.S. Вот это я не знаю как сделать, тут просто сравнивать координаты вершин квадрата с координатами точки сложно: ведь этот квадрат может не строго лежать так, а быть повернуть, тогда что? Еще вопрос: накрывает ли квадрат точку, если она лежит на его стороне? 4)Находим площадь квадрата (как квадрат стороны) и сравниваем ее с площадью других получившихся квадратов, получаем искомый квадрат с минимальной площадью. |
14.11.2008, 19:55 | #2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Отлично! Предоставьте свой вариант решения задачи и укажите, какие у Вас возникли трудности. Мы поможем их разрешить.
E-Mail: arigato.freelance@gmail.com
|
14.11.2008, 20:06 | #3 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Меня интересует пункт 3. Я не знаю как проверить содержание точек в найденном квадрате
|
14.11.2008, 20:32 | #4 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Если у нас есть квадрат (X1, Y1) - (X2, Y2), где X1 < X2, Y1 < Y2, то точка (X, Y) принадлежит этому квадрату, если:
X1 <= X <= X2 Y1 <= Y <= Y2 E-Mail: arigato.freelance@gmail.com
|
14.11.2008, 20:51 | #5 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Это то итак понятно, а если квадрат не лежит так ■, а повернут ♦???
|
14.11.2008, 21:18 | #6 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Тогда необходимо произвести поворот системы координат так, что бы стороны квадрата оказались параллельными осям координат.
E-Mail: arigato.freelance@gmail.com
|
14.11.2008, 21:27 | #7 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Ну это гемор. Можно найти расстояния между этой точкой и вершинами квадрата и сравнить каждое из них с длиной диагонали? Если все эти расстояния будут меньше дляны диагонали, то точка лежит в квадрате. Это верно?
|
14.11.2008, 21:53 | #8 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Нет, еcли у нас, например, ромб, то можно найти точку за его пределом, но расстояния будут меньше длинны диагонали.
Можно найти угол, который составляет сторона квадрата к оси ординат и произвести поворот осей на этот угол. Формулы поворота осей координат (если мне память не изменяет): x1 = - x * sin (a) + y * cos (b); y1 = x * cos (a) + y * sin (b); Это общий вид формул, в нашем случае b = a. Это надо проделать для всех точек, после чего получим обычный квадрат. E-Mail: arigato.freelance@gmail.com
|
14.11.2008, 22:00 | #9 |
Пользователь
Регистрация: 14.11.2008
Сообщений: 17
|
Нет, ромб не может быть, я ж проверяю сначала расположение точек на квадрат. Еще вопрос: если точка второго множества лежит на стороне квадрата, то она считается содержащейся в квадрате?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедуры и функции | 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 |