Si crea un rectángulo con un ancho negativo, dibuja un rectángulo que comienza en el punto original (x, y) y dibuja hacia la izquierda en lugar de hacia la derecha.
Si crea un rectángulo con una altura negativa, dibuja un rectángulo que comienza en el punto original (x, y) y dibuja hacia arriba en lugar de hacia abajo.
Por lo tanto, si hace un rectángulo de con decir new Rectangle(5, 4, -1, -2);
, entonces obtiene un rectángulo con los siguientes puntos: (5,4), (4,4), (5,2), (4,2).
ejecute el código siguiente para ver un ejemplo:
Rectangle negWidthHeightRect = new Rectangle(5, 4, -1, -2);
Console.WriteLine(negWidthHeightRect.Left);
Console.WriteLine(negWidthHeightRect.Right);
Console.WriteLine(negWidthHeightRect.Bottom);
Console.WriteLine(negWidthHeightRect.Top);
Console.WriteLine(negWidthHeightRect.Width);
Console.WriteLine(negWidthHeightRect.Height);
Console.ReadLine();
La salida es la siguiente:
5
4
2
4
-1
-2
El comportamiento es un tanto esperar teniendo en cuenta los comentarios de Microsoft en otros controles de rectángulo como (además del sistema. Drawing.Rectangle). Ver MSDM here.
Ahora, ¿por qué el método IntersectsWith
del rectángulo produce resultados tan extraños. Es porque está utilizando el siguiente código para implementar el método IntersectsWith
:
public bool IntersectsWith(Rectangle rect)
{
return ((((rect.X < (this.X + this.Width)) && (this.X < (rect.X + rect.Width))) && (rect.Y < (this.Y + this.Height))) && (this.Y < (rect.Y + rect.Height)));
}
Si usted sigue a través de la lógica de sí mismo que va a ver por qué a obtener las respuestas que recibe. Lo que Microsoft probablemente debería hacer es o bien:
1) cuando se ve una anchura/altura negativos hacen que la anchura/altura positiva y reajustar la izquierda/Superior
2) o en la lógica IntersectsWith, se debe hacer una Min (x, x + ancho) y Min (y, y + ancho) al hacer la lógica.
Algunos otros más inteligentes que yo pueden tener una forma aún más ingeniosa de hacerlo.
No tengo idea ... Supongo que el comportamiento de IntersectsWith no está definido para rectángulos de tamaño negativo, aunque no está documentado como tal en [API] (http://msdn.microsoft.com/en-us/ library/y10fyck0.aspx) ... ¿Le sugiero que publique esta pregunta en MSDN como "contenido de la comunidad"? Es una REALMENTE buena pregunta. Uno sospecha que el comportamiento de Rectangle de tamaño negativo no está definido para todas las operaciones espaciales ... ¿Se procesan como se espera? – corlettk
@corlettk: "Contenido de la comunidad" ** no ** está destinado a publicar preguntas.Para eso están los foros de MSDN. –
Thanx Cody. Nunca he usado los foros de MSDN ;-) – corlettk