SoRoMan

人若无名,便可专心练剑.

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  12 随笔 :: 1 文章 :: 41 评论 :: 0 Trackbacks
感觉就是个插入排序问题,其插入排序实现见http://www.cppblog.com/SoRoMan/archive/2006/08/09/11053.html

“在设置这样一个矩形范围的时候,往往右下角坐标是不包括在内的,也就是说右下角实际坐标为 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个.
re: 给亲爱嘀小鸡~ SoRoMan 2006-07-10 12:16
好玩
re: 给亲爱嘀小鸡~ SoRoMan 2006-07-10 12:15
hoho