OSRMProjectedRect OSRMProjectedRectUnion(OSRMProjectedRect rect1, OSRMProjectedRect rect2) {
    bool rect1IsZero = OSRMProjectedRectIsZero(rect1);
    bool rect2IsZero = OSRMProjectedRectIsZero(rect2);

    if (rect1IsZero)
        return (rect2IsZero ? OSRMProjectedRectZero() : rect2);

    if (rect2IsZero)
        return rect1;

    double minX = RMMIN(rect1.origin.x, rect2.origin.x);
    double minY = RMMIN(rect1.origin.y, rect2.origin.y);
    double maxX = RMMAX(rect1.origin.x + rect1.size.width, rect2.origin.x + rect2.size.width);
    double maxY = RMMAX(rect1.origin.y + rect2.size.height, rect2.origin.y + rect2.size.height);

    return OSRMProjectedRectMake(minX, minY, maxX - minX, maxY - minY);
}
Ejemplo n.º 2
0
// Rect intersection
RMProjectedRect RMProjectedRectIntersection(RMProjectedRect rect1, RMProjectedRect rect2)
{
    bool rect1IsZero = RMProjectedRectIsZero(rect1);
    bool rect2IsZero = RMProjectedRectIsZero(rect2);

    if (rect1IsZero)
        return (rect2IsZero ? RMProjectedRectZero() : rect2);

    if (rect2IsZero)
        return rect1;

    if ( ! RMProjectedRectIntersectsProjectedRect(rect1, rect2))
        return RMProjectedRectZero();

    double minX, maxX, minY, maxY;

    minX = RMMAX(rect1.origin.x, rect2.origin.x);
    minY = RMMAX(rect1.origin.y, rect2.origin.y);
    maxX = RMMIN(rect1.origin.x + rect1.size.width, rect2.origin.x + rect2.size.width);
    maxY = RMMIN(rect1.origin.y + rect1.size.height, rect2.origin.y + rect2.size.height);

    return RMProjectedRectMake(minX, minY, maxX - minX, maxY - minY);
}