2017-07-24 106 views
0
Rect r = new Rect(new Point(0, 0), new Point(-1, -1)); 
var check = r.Top > r.Bottom; //false, Top is -1 

我想,顶部应该大于底部。为什么它不是真的?为什么Rect.Top小于Bottom?

+2

在* general *计算机图形学世界中,坐标平面的左上角是'(0,0)',这意味着'Top'总是*必须是较低的值。 (为什么你会期望它会创建一个比Bottom更靠下屏幕的'Top'?)在这个特殊的'Rect'类中,你将永远永远永远不会*看到一个'Top '这比'Bottom'更大的价值,因为这没有意义。 –

回答

2

您似乎觉得new Rect(new Point(0, 0), new Point(-1, -1))会创建一个带有负宽度和高度的Rect。不是这种情况。

事实上,如online documentation提到的,

初始化RECT结构,这正是大到足以容纳两个指定点的新实例。

看看该构造函数的source code揭示了它的工作原理。

public Rect(Point point1, Point point2) 
{ 
    _x = Math.Min(point1._x, point2._x); 
    _y = Math.Min(point1._y, point2._y); 

    // Max with 0 to prevent double weirdness from causing us to be (-epsilon..0) 
    _width = Math.Max(Math.Max(point1._x, point2._x) - _x, 0); 
    _height = Math.Max(Math.Max(point1._y, point2._y) - _y, 0); 
} 
1

大多数计算机图形学中的点(0,0)位于左上角,越低则y坐标值越高。当你走得更靠右时,与x坐标相同。

1

它帮助我:读细心的MSDN文档(https://msdn.microsoft.com/en-us/library/ms587931(v=vs.110).aspx):

初始化RECT结构,这正是大 到足以容纳两个指定点的新实例。

这意味着,第一个点不是强制性的左下和右上/顶部,反之亦然。这取决于点(我想说,左/底部和右/顶点不应与构造函数的参数相同)。 在你的情况左/底点是(-1,0),右/顶部是(0,-1)=>bottom = 0; top = -1;

相关问题