2 つの異なる が与えられた場合、どうすればCGPoints
それらを に変えることができCGRect
ますか?
例:
CGPoint p1 = CGPointMake(0,10);
CGPoint p2 = CGPointMake(10,0);
どうすればこれをに変えることができCGRect
ますか?
2 つの異なる が与えられた場合、どうすればCGPoints
それらを に変えることができCGRect
ますか?
例:
CGPoint p1 = CGPointMake(0,10);
CGPoint p2 = CGPointMake(10,0);
どうすればこれをに変えることができCGRect
ますか?
これは 2 つの任意の点を取り、それらを対角として持つ CGRect を提供します。
CGRect r = CGRectMake(MIN(p1.x, p2.x),
MIN(p1.y, p2.y),
fabs(p1.x - p2.x),
fabs(p1.y - p2.y));
小さい x 値と小さい y 値のペアは、常に四角形の原点になります (最初の 2 つの引数)。x 値の差の絶対値が幅になり、y 値の差の絶対値が高さになります。
ケンの答えを少し修正。CGGeometry に rect を「標準化」させます。
CGRect rect = CGRectStandardize(CGRectMake(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y));
p1 が原点で、もう一方の点が長方形の反対側の角であると仮定すると、次のようにすることができます。
CGRect rect = CGRectMake(p1.x, p1.y, fabs(p2.x-p1.x), fabs(p2.y-p1.y));
この関数は任意の数の CGPoints を取り、最小の 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;
}
2 つの点が線上にある場合、これは幅または高さ 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);
let r0 = CGRect(origin: p0, size: .zero)
let r1 = CGRect(origin: p1, size: .zero)
let rect = r0.union(r1).standardized