¿Alguien puede explicar el resultado de CGRectGetMaxX y CGRectIntersection?

Guión

Suponga dos rectangularjs que no se cruzan, 10 puntos de ancho y 5 puntos de alto. Los valores x / y en el siguiente esquema indican las coorderadas de los puntos de esquina de los dos rectangularjs.

x/y = 0/0 +------------------+ x/y = 9/0 | | | | | | | | x/y = 0/4 +------------------+ x/y = 9/4 x/y = 0/5 +------------------+ x/y = 9/5 | | | | | | | | x/y = 0/9 +------------------+ x/y = 9/9 

Aquí está el código para configurar estos rectangularjs:

 CGRect rect1 = CGRectMake(0.0f, 0.0f, 10.0f, 5.0f); CGRect rect2 = CGRectMake(0.0f, 5.0f, 10.0f, 5.0f); 

CGRectGetMaxX

El valor de retorno para la function CGRectGetMaxX Core Graphics se documenta así:

El mayor valor de la coorderada x para el rectángulo.

Aquí hay un fragment de código que usa la function:

 CGFloat maxX = CGRectGetMaxX(rect1); 

De la documentation, esperaría que maxX sea ​​9. Sin embargo, maxX es 10. ¿Eh?

CGRectIntersection

El valor de retorno para la function CGRectIntersection Core Graphics está documentado de la siguiente manera:

Un rectángulo que representa la intersección de los dos rectangularjs especificados. Si los dos rectangularjs no se cruzan, devuelve el rectángulo nulo. Para verificar esta condición, use CGRectIsNull.

Aquí hay un fragment de código que usa la function:

 CGRect intersectionRect = CGRectIntersection(rect1, rect2); bool intersectionRectIsNull = CGRectIsNull(intersectionRect); 

De la documentation, esperaría que intersectionRectIsNull sea ​​verdadero ya que rect1 y rect2 claramente no se cruzan. Sin embargo, intersectionRectIsNull es falso. Huh ???

Si examinamos intersectionRect en el depurador, vemos esto:

 (CGRect) $0 = origin=(x=0, y=5) size=(width=10, height=0) 

Sí, así que ahora está claro por qué CGRectIsNull devuelve falso, pero ¿por qué en la tierra es intersectionRect ? ¿No es así?

 (CGRect) $0 = origin=(x=+Inf, y=+Inf) size=(width=0, height=0) 

Pregunta

¿Alguien puede explicar por qué la documentation de estas funciones NO está mal? Debo estar perdiendo algo, pero por mi vida no puedo ver qué es.

Tu diagtwig es incorrecto. No coincide con sus llamadas CGRectMake .

Un rectángulo que es 10 ancho con un origen de 0 tendrá un máximo de X de 10, tal como lo obtienes.

El 9 en su diagtwig debe ser 10 y el 4 en su diagtwig debe ser 5 .

Dadas las dos llamadas a CGRectMake , los dos rectangularjs comparten un lado común. No hay brecha entre ellos.

Recuerde, 0 + 10 es 10, no 9 y 0 + 5 es 5, no 4.