Для 1) Вы должны проверить наложение в прямоугольниках. Первый тест, который я разработал, просто начнется с прямоугольников друг над другом и медленно раздвигает их, пока не будет обнаружено никаких столкновений. Ошибка, скорее всего, должна быть измерена как процент перекрытия, так и количество пикселей, перекрывающихся. Я бы сделал и то, и другое ... Кто знает, что они, возможно, разработали алгоритм, чтобы быть точным с ошибкой пикселя или% размерной ошибки объекта. т.е. более точные для небольших объектов. После этого первоначального «быстрого теста» я попытался разработать более общий случай с большим изменением перекрытия. т.е. ... 1 пиксель в верхнем левом углу, перекрывающий 1 пиксель в нижнем левом углу другого прямоугольника с различными размерами прямоугольников. Тестирование некоторых умных угловых случаев и некоторых псевдослучайных перекрывающихся треугольников кажется хорошим дизайном для меня.
Я всегда разрабатываю простые тесты, чтобы получить немедленную обратную связь, а затем попытайтесь перейти к более общим и тщательным испытаниям. Очевидно, если вы поместите два прямоугольника вниз, которые полностью перекрываются, и нет столкновений, что-то не так.
Для 2) Подсчет семафоров приходит на ум как способ решить эту проблему. Вы хотите, чтобы он блокировался, когда очередь заполнена на стороне ввода и блокируется, когда очередь пуста на стороне декомпрессии. Я не уверен, что оба объекта могут стоять в очереди и деактивировать, но на самом деле не имеет значения, используете ли вы семафоры для отслеживания состояния очереди. Вы также хотите получить эксклюзивную блокировку при каждом изменении очереди.
Я думаю, что объекты в вопросах являются производителями и потребителями известной проблемы производителя-потребителя. –