17 "title" :
"Rectangle",
18 "description" :
"A 2-dimensional axis-aligned box.",
77 return VuoText_format(
"%g×%g @ %g,%g", r.size.x, r.size.y, r.center.x, r.center.y);
111 return p.x >= r.center.x - r.size.x/2
112 && p.x <= r.center.x + r.size.x/2
113 && p.y >= r.center.y - r.size.y/2
114 && p.y <= r.center.y + r.size.y/2;
128 float rectangleALeft = rectangleA.center.x - rectangleA.size.x/2.;
129 float rectangleARight = rectangleA.center.x + rectangleA.size.x/2.;
130 float rectangleABottom = rectangleA.center.y - rectangleA.size.y/2.;
131 float rectangleATop = rectangleA.center.y + rectangleA.size.y/2.;
133 float rectangleBLeft = rectangleB.center.x - rectangleB.size.x/2.;
134 float rectangleBRight = rectangleB.center.x + rectangleB.size.x/2.;
135 float rectangleBBottom = rectangleB.center.y - rectangleB.size.y/2.;
136 float rectangleBTop = rectangleB.center.y + rectangleB.size.y/2.;
138 float tolerance = 0.00001;
140 if (rectangleARight < rectangleBLeft + tolerance
141 || rectangleBRight < rectangleALeft + tolerance
142 || rectangleATop < rectangleBBottom + tolerance
143 || rectangleBTop < rectangleABottom + tolerance)
147 float intersectionLeft =
MAX(rectangleALeft, rectangleBLeft);
148 float intersectionRight =
MIN(rectangleARight, rectangleBRight);
149 float intersectionBottom =
MAX(rectangleABottom, rectangleBBottom);
150 float intersectionTop =
MIN(rectangleATop, rectangleBTop);
153 { (intersectionLeft + intersectionRight) / 2.,
154 (intersectionBottom + intersectionTop) / 2. },
155 { intersectionRight - intersectionLeft,
156 intersectionTop - intersectionBottom }
168 VuoReal left =
MIN(rectangleA.center.x - rectangleA.size.x / 2., rectangleB.center.x - rectangleB.size.x / 2.);
169 VuoReal right =
MAX(rectangleA.center.x + rectangleA.size.x / 2., rectangleB.center.x + rectangleB.size.x / 2.);
170 VuoReal bottom =
MIN(rectangleA.center.y - rectangleA.size.y / 2., rectangleB.center.y - rectangleB.size.y / 2.);
171 VuoReal top =
MAX(rectangleA.center.y + rectangleA.size.y / 2., rectangleB.center.y + rectangleB.size.y / 2.);
174 { (left + right) / 2.,
175 (bottom + top) / 2. },