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