“在设置这样一个矩形范围的时候,往往右下角坐标是不包括在内的,也就是说右下角实际坐标为 right - 1, bottom -1,所以 right - left 是可以直接算出其长度的。 ”
--------------------
你说的这个是结论,至于原因,就是为什么在绘制的时候不去包括右下角(right, bottom),而去绘制(right - 1, bottom - 1)?正如我文中说的,是左上约定在起的作用。
简单概括一下就是:
在一般的坐标系里面,比如画一个矩形(0,0,2,2),会经过(2,2)这点。而在以像素为单位的屏幕坐标系里面,像素有大小,所以如果以其中心点为基准(坐标点),在绘制的时候,就会包含(right, bottom)这个像素的1/4部分,但是1个像素是最小单元,要么绘制,要么不绘制,所以,为了解决无法绘制1/4像素的问题,就统统向左向上移动1/2像素,绘制移动后的矩形区域,其大小(面积)不变,位置变了,新的矩形的右下角成了(right - 1, bottom - 1)。
to mroske:
如果一个坐标它的长度因该为1,那么 p1(0, 0) 到 p2(2, 0) 的长度应该为3。即 (0,0), (1,0), (2,0),如果直接 2 - 0 = 2,那这个得到只是坐标差距,并不是长度。
------------------------------------------
不知道你这里说的长度是什么意思?
在屏幕上的最小单位是一个像素,屏幕上的坐标是以以像素为单位的,所以坐标之间的差距就是多少个像素.
p1(0, 0) 到 p2(2, 0) 之间的差距为2,表明中间跨越2个像素.或者说长度为2个像素. 所以不能填充(0,0),(1,0),(2,0) 3个像素.我们可以作个实验,你调用一些图形库中的画线函数,画出p1(0, 0) 到 p2(2, 0)的直线,最后在屏幕上出现的应该是2个像素,而不是3个.