把两个CGPoints变成一个CGRect

我怎么能,给两个不同的CGPoints ,把他们变成一个CGRect

例:

 CGPoint p1 = CGPointMake(0,10); CGPoint p2 = CGPointMake(10,0); 

我怎样才能把它变成一个CGRect

这将需要两个任意点,并给你CGRect,让他们作为对面的angular落。

 CGRect r = CGRectMake(MIN(p1.x, p2.x), MIN(p1.y, p2.y), fabs(p1.x - p2.x), fabs(p1.y - p2.y)); 

与较小的y值配对的较小的x值将始终是rect的原点(前两个参数)。 x值之差的绝对值将是宽度,y值之间是高度。

肯的​​答案稍作修改。 让CGGeometry为您“标准化”矩形。

CGRect rect = CGRectStandardize(CGRectMake(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y));

假设p1是原点,另一个点是矩形的对angular,可以这样做:

 CGRect rect = CGRectMake(p1.x, p1.y, fabs(p2.x-p1.x), fabs(p2.y-p1.y)); 

这个函数可以使用任意数量的CGPoint,并给你最小的CGRect。

 CGRect CGRectSmallestWithCGPoints(CGPoint pointsArray[], int numberOfPoints) { CGFloat greatestXValue = pointsArray[0].x; CGFloat greatestYValue = pointsArray[0].y; CGFloat smallestXValue = pointsArray[0].x; CGFloat smallestYValue = pointsArray[0].y; for(int i = 1; i < numberOfPoints; i++) { CGPoint point = pointsArray[i]; greatestXValue = MAX(greatestXValue, point.x); greatestYValue = MAX(greatestYValue, point.y); smallestXValue = MIN(smallestXValue, point.x); smallestYValue = MIN(smallestYValue, point.y); } CGRect rect; rect.origin = CGPointMake(smallestXValue, smallestYValue); rect.size.width = greatestXValue - smallestXValue; rect.size.height = greatestYValue - smallestYValue; return rect; } 

如果两个点在一条线上,这将返回宽度或高度为0的矩形

 float x,y,h,w; if (p1.x > p2.x) { x = p2.x; w = p1.x-p2.x; } else { x = p1.x; w = p2.x-p1.x; } if (p1.y > p2.y) { y = p2.y; h = p1.y-p2.y; } else { y = p1.y; h = p2.y-p1.y; } CGRect newRect = CGRectMake(x,y,w,h);