unavailable example cgpointmake ios iphone core-graphics cgrect cgpoint

ios - example - Convierte dos CGPoints en un CGRect



cgrectmake swift 4 (5)

Esta función toma cualquier número de CGPoints y te devuelve el CGRect más pequeño.

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; }

¿Cómo puedo, dado dos CGPoints diferentes, convertirlos en un CGRect ?

Ejemplo:

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

¿Cómo puedo convertir esto en un CGRect ?


Esto devolverá un rect de ancho o altura 0 si los dos puntos están en una línea

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);


Esto tomará dos puntos arbitrarios y le dará el CGRect que los tiene como esquinas opuestas.

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

El valor x más pequeño emparejado con el valor y más pequeño siempre será el origen del rect (los dos primeros argumentos). El valor absoluto de la diferencia entre los valores de x será el ancho, y entre los valores de y la altura.


Suponiendo que p1 es el origen y el otro punto es la esquina opuesta de un rectángulo, puede hacer esto:

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


Una ligera modificación de la respuesta de Ken. Deje que CGGeometry "estandarice" el rect para usted.

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