Согласно AirBnb react style guide
, которому следуют правила eslint, порядок или метод в React.Component должны быть
blockquote>
- необязательными статическими методами
[ 113] конструктор- getChildContext
- componentWillMount
- componentDidMount
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
[1110 ] componentDidUpdate- componentWillUnmount
- clickHandlers или eventHandlers, такие как onClickSubmit () или onChangeDescription ()
- методы getter для рендеринга, такие как getSelectReason () или getFooterContent ()
[14] дополнительные методы рендеринга, такие как renderNavigation () или renderProfilePicture ()- render
Это - особый случай общего 2D отсечения полигона. Хорошее место для запуска является алгоритмом Weiler-Атертона. Википедия имеет сводку и ссылки на исходную бумагу. Алгоритм, кажется, соответствует структуре данных, которую Вы описали вполне прилично.
Обратите внимание, что довольно возможно, что Вы закончите с прямоугольником с дырой в нем (если красный будет полностью в черном) или даже два прямоугольника (например, если красный является более высоким и более тощим, чем черный цвет). Если Вы уверены, что существует только один угол красного прямоугольника в черном затем, решение должно быть намного более простым.
Насколько точный координаты? Если прямоугольники являются довольно маленькими, самый легкий подход мог бы быть, чтобы просто нарисовать их на холсте, черный прямоугольник сначала, сопровождаемый красным. Остающиеся черные пиксели на холсте являются полигоном, который это оставляют.
Другой подход должен разделить координатную сетку на набор прямоугольников на основе всех сторон прямоугольников (не считающий неограниченные прямоугольники, у Вас есть до 9 прямоугольников, сгенерированных, если у Вас есть два исходных прямоугольника). Затем просто протестируйте представительную точку от каждого из этих прямоугольников для членства в конкретных полигонах для определения, в котором находятся прямоугольники и которые отсутствуют.
Я нашел некоторый материал здесь, я мог бы использовать:
http://www.cgal.org/Manual/3.3/doc_html/cgal_manual/Boolean_set_operations_2/Chapter_main.html
Я на самом деле загрузил источник CGAL, прежде чем я даже отправил этот вопрос, но я думаю, что ближе изучу его.