一矩形区域,分割诚16*16的小区域,区域标号由左至右为1,2,3,4,。
然后下排再由左至右标号。现在这个矩形区域中绘制另一小矩形区域,如何判断
哪些标号的小区域在这个新绘制的矩形区域内,只要相交就符合条件,给出
所得小区域的标号值。

解决方案 »

  1.   

    我的想法是这样的:
    先计算出16*16个小方块的各个顶点坐标,再记下新画的矩形区域的四个顶点的坐标(Top,Left,Bottom,Right),然后对16*16个小的方块循环,看看小方块的某个顶点是否在矩形区域内,只要有一个顶点在,就加上该小方块的标号。
      

  2.   

    假设左上角坐标为(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
      

  3.   

    有笔误,重来...假设左上角坐标为(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;