|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.04.2012, 21:17 | #1 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
пересечения квадратов
Дан файл действительных чисел, каждая тройка чисел определяет на плоскости квадрат со сторонами, параллельными координатным осям,причем первые 2 числа,определяют координаты центра квадрата, а 3 число - длину его стороны. Определить имеются ли на плоскости точки принадлежащие все квадратам.
Помогите немного разложить по полочкам. В задаче требуется найти точку пересечения квадратов, её следует искать сопостовляя координаты вершин одного квадрата с другим и т.д. Помогите составить условие, при котором следует сравнивать соответствующие вершины квадратов, а то я что-то запуталась. |
11.04.2012, 22:06 | #2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,332
|
Я бы посмотрел в сторону такого алгоритма:
1. Центр одного квадрата помещаем в начало координат; 2. Вокруг этого квадрата рисуем больший квадрат. Стороны этого квадрата - положение центра второго квадрата. 3. Описываем 4-е уравнения для этих сторон (две вертикальные и две горизонтальные прямые). 4. Записываем условие попадания точки в больший квадрат. Например: если для большего квадрата мы получили уравнения вида xkp = a; xkl = -a; ykt = b и ykb = -b, то условие могло бы быть таким: Код:
Как то так, думаю ...
Как-то так, ...
|
11.04.2012, 22:33 | #3 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
Думаю этот вариант не подойдёт. Числа в файле должны задаваться пользователем и не факт, что там будет присутствовать такая тройка, которая соответствует квадрату с центром в начале координат. Программа должна работать в любом случае.
|
11.04.2012, 22:34 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Мой алгоритм:
1) инициализируем top, right - максимальными, bottom ,left - минимальными значениями 2) считываем 3 числа x, y, a 3) if x-a/2>left then left=x-a/2 if x+a/2<right then rigth=x+a/2 if y-a/2>bottom then bottom=y-a/2 if y+a/2<top then top=y+a/2 4) после считывания всех троек точек, если top>=bottom и right>=left, то точки есть
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 11.04.2012 в 22:44. |
11.04.2012, 23:26 | #5 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
вот) то что нужно) спасибо)
|
12.04.2012, 20:11 | #6 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
а как следует задать цикл, чтобы сравнивая координаты квадратов программа сохраняла область пересечения или, чтобы сравнивались уже пересеченные квадраты со следующим и т.д.?
|
12.04.2012, 23:22 | #7 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,332
|
В общем то я подумал о двух квадратах. Как изменить координаты второго квадрата вычитанием, что бы первый оказался в центре системы координат не объясняю.
В том общем случае, когда квадратов много и надо определить есть ли общая область пересечения, можно написать функцию, которая вычисляет область пересечения прямоугольников с параметрами: Xc, Yc - координаты центра, a, h - ширина и высота прямоугольников. 1. Считываем данные первого прямоугольника (x1, y1, и вычисляем его границы. Пусть это будут переменные L1=Х1c-a1/2; R1=X1c+a1/2; T1=Y1c+h1/2; B1=Y1c-h1/2. 2. Считываем данные второго прямоугольника и так-же определяем его границы: L2=Х2c-a2/2; R1=X2c+a2/2; T1=Y2c+h2/2; B1=Y2c-h2/2. 3. Определяем границы области пересечения: L = большее из {L1, L2}; R=меньшее из {R1, R2}; T= меньшее из {T1,T2}; B= большее из {B1, B2}. 4. Проверяем, что пересечение существует: L < R и T > B. 5. Функция возвращает границы пересечения через параметры и логическое значение через имя: true - есть пересечение, false - пересечения нет. 6. Если пересечения нет (функция вернула false) прекращаем работу с сообщением, что общего пересечения нет. Иначе (true) продолжаем считывать данные для следующего прямоугольника и вызывать функцию. Пример: Код:
Так думаю будет правильно ...
Как-то так, ...
|
12.04.2012, 23:43 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
|
|
12.04.2012, 23:43 | #9 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Аруми, если по моему алгоритму, то просто все тройки считываем, сколько есть.
ViktorR, так вы и сделали по моему алгоритму (но с несколькими улучшениями: 1) останов, когда пересечения не существует 2) инициализация первыми 2 квадратами) УПД Serge_Bliznykov, второй день подряд не успеваю ответить (опережают) Цитата:
Пересечение существует, если L<=R и T>=B (просто вырождается в точку).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 12.04.2012 в 23:48. |
|
13.04.2012, 20:08 | #10 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,332
|
Я согласен, что повторил алгоритм ...
Делал я это не со зла Я просто неадекватно отреагировал на: Цитата:
То что мое предложение совпало, говорит о верности принятого подхода ... Мне задачка понравилась, и хотя надо было на работу, засиделся.
Как-то так, ...
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Точка пересечения отрезков | Witaliy | Помощь студентам | 5 | 25.12.2011 13:15 |
Исходник проверки пересечения многоугольников | GoodDA | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 23.03.2011 22:46 |
Найти точку пересечения биссектрис | error404 | Фриланс | 10 | 20.02.2010 21:02 |
C. Найти пересечения линий. | Sekmegalife | Помощь студентам | 1 | 19.10.2009 08:34 |
Pascal. Площадь пересечения кругов | TOSAgrk | Помощь студентам | 1 | 05.02.2009 04:23 |