2
如何找到两个矩形之间的距离?相交距离应该返回0。两个矩形之间的距离
如何找到两个矩形之间的距离?相交距离应该返回0。两个矩形之间的距离
下面是用于计算由CGSize表示的两个CGRects之间距离的快速功能:
CGSize CGSizeDistanceBetweenRects(CGRect rect1, CGRect rect2)
{
if (CGRectIntersectsRect(rect1, rect2))
{
return CGSizeMake(0, 0);
}
CGRect mostLeft = rect1.origin.x < rect2.origin.x ? rect1 : rect2;
CGRect mostRight = rect2.origin.x < rect1.origin.x ? rect1 : rect2;
CGFloat xDifference = mostLeft.origin.x == mostRight.origin.x ? 0 : mostRight.origin.x - (mostLeft.origin.x + mostLeft.size.width);
xDifference = MAX(0, xDifference);
CGRect upper = rect1.origin.y < rect2.origin.y ? rect1 : rect2;
CGRect lower = rect2.origin.y < rect1.origin.y ? rect1 : rect2;
CGFloat yDifference = upper.origin.y == lower.origin.y ? 0 : lower.origin.y - (upper.origin.y + upper.size.height);
yDifference = MAX(0, yDifference);
return CGSizeMake(xDifference, yDifference);
}
在一个稍微有关说明,这里是如何计算中心两个给定CGRects的之间的距离:
CGFloat CGRectGetDistanceBetweenCenters(CGRect rect1, CGRect rect2)
{
CGPoint center1 = CGPointMake(CGRectGetMidX(rect1), CGRectGetMidY(rect1));
CGPoint center2 = CGPointMake(CGRectGetMidX(rect2), CGRectGetMidY(rect2));
CGFloat horizontalDistance = (center2.x - center1.x);
CGFloat verticalDistance = (center2.y - center1.y);
CGFloat distance = sqrt((horizontalDistance * horizontalDistance) + (verticalDistance * verticalDistance));
return distance;
}
感谢您的回答。但是,假设矩形的大小不一样,我应该如何考虑尺寸差异? – 2013-03-06 14:47:45
如果我明白你在问什么,我不舒服,因为imo。这种方法将找到两个CGRect之间的最短距离,而不管它们的大小 – jalmaas 2013-03-07 07:55:52