Показать сообщение отдельно
Старый 27.11.2009, 09:59   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от MrSTEP Посмотреть сообщение
выразить б.квадрат можно через массив 1000х1000, элементы которого - значения булевского типа. Если этот участок квадрата вырезан, то элементам из участка надо присвоить true. если при вырезке второго участка мы натыкаемся на элементы со значением true, то выводим ошибку.
это первое, что пришло в голову
Да ну, зачем так сложно? Всё гораздо проще! Ладно, попробую расписать алгоритм. Координаты большого квадрата - 0, 0 (левый нижний угол), 1000, 1000 (правый верхний угол). Пусть есть два малых прямоугольника a и b. Будем, для определенности, подразумевать, что фигура a находится в общем случае левее фигуры b. Обозначим координаты правых верхних углов x1a, y1a, x1b, y1b. Для левых нижних углов будет, соответственно, x2a, y2a, x2b, y2b. Далее, считаем, что все 8 чисел как-то заданы, надо лишь проверить, что малые фигуры во-первых, не вылезают за рамки большого квадрата и во-вторых, не накладываются. Выполнению первого условия соответствует:
x1a <= 1000
x2a >= 0
y1a <= 1000
y2a >= 0

x1b <= 1000
x2b >= 0
y1b <= 1000
y2b >= 0


Для начала должны быть проверены все 8 указанных соотношений - если хоть одно нарушено, то нужно выдать сообщение об ошибке (пересечение границ б.к.).

Теперь о наложениях. Будем считать, что предыдущие 8 условий выполнены, т.е. выхода за рамки б.к. нет. Тогда если выполняется условие
x1a <= x2b
т.е. правая вертикальная сторона фигуры a находится левее левой вертикальной стороны фигуры b, то всё в порядке - наложений нет.
Если же указанное условие не выполнено, т.е.
x1a > x2b
то наложений не будет только если малые фигуры "разведены" по вертикали, т.е. либо
y2a >= y1b
либо
y2b >= y1a
Если какое-либо из двух условий выполнено, то - порядок, а если результат отрицательный, то следует выдать сообщение об ошибке (наложение).
Всё!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070