假设左上角坐标为(0,0),每一个小矩形的宽度为w,高度为h,这样第n(1=<n<=256)个小矩形的四点坐标都能算出来,再画的这个矩形传进来的有用数据其实只是左上角和右下角的坐标而已,假设他们分别为(left,top),(right,bottom)var i, j: integer; brow, erow, bcol, ecol: integer; begin brow := left div w; erow := right div w + 1;//????这里整除时应该不用加1,可能得多个判断 brow := top div h; erow := bottom div w + 1;//????这里整除时应该不用加1,可能得多个判断 for i = brow to erow do for j := bcol to ecol do begin memo1.lines.add(inttostr(i * 16 + j)); //i * 16 + j既为小矩形编号, end; end;应该可以解决,而且不是很麻烦。 不行的话咱再讨论。 想要多给分的话我随叫随到哦.... :-P
有笔误,重来...假设左上角坐标为(0,0),每一个小矩形的宽度为w,高度为h,再画的这个矩形传进来的有用数据其实只是左上角和右下角的坐标而已,假设他们分别为(left,top),(right,bottom)var i, j: integer; brow, erow, bcol, ecol: integer; begin //下面这四个值你根据整不整除啊,+1,-1的, brow := left div w; erow := right div w bcol := top div h; ecol := bottom div h; for i = brow to erow do for j := bcol to ecol do begin memo1.lines.add(inttostr(i * 16 + j)); //i * 16 + j既为小矩形编号, end; end;
先计算出16*16个小方块的各个顶点坐标,再记下新画的矩形区域的四个顶点的坐标(Top,Left,Bottom,Right),然后对16*16个小的方块循环,看看小方块的某个顶点是否在矩形区域内,只要有一个顶点在,就加上该小方块的标号。
i, j: integer;
brow, erow, bcol, ecol: integer;
begin
brow := left div w;
erow := right div w + 1;//????这里整除时应该不用加1,可能得多个判断
brow := top div h;
erow := bottom div w + 1;//????这里整除时应该不用加1,可能得多个判断 for i = brow to erow do
for j := bcol to ecol do
begin
memo1.lines.add(inttostr(i * 16 + j)); //i * 16 + j既为小矩形编号,
end;
end;应该可以解决,而且不是很麻烦。
不行的话咱再讨论。
想要多给分的话我随叫随到哦.... :-P
i, j: integer;
brow, erow, bcol, ecol: integer;
begin
//下面这四个值你根据整不整除啊,+1,-1的,
brow := left div w;
erow := right div w
bcol := top div h;
ecol := bottom div h; for i = brow to erow do
for j := bcol to ecol do
begin
memo1.lines.add(inttostr(i * 16 + j)); //i * 16 + j既为小矩形编号,
end;
end;