一个坐标点X=100  Y200谁能用最简单的最快速的方法,得到这个点周围的8个坐标,UP~UP~UP~UP~UP~有分X,Y-1
X,Y+1
X-1,Y
X+1,Y
X-1,Y-1
X+1,Y-1
X+1,Y+1
X-1,Y+1

解决方案 »

  1.   

    设计一个类,核心是一个 array[0..7] of tpoint; 
      

  2.   

    这个坐标是动态的,我准备写个Function传进一个XY坐标,result返回一个数组,
    这个数组就放这个坐标点的旁边8个坐标值
    睡觉去了
    等待最方便最快速的算法
      

  3.   

    Fast就用basm;或者先进行inc或dec然后直接赋值,虽然代码长点,效率比循环快.
      

  4.   

    type TPTAry = array [0..7] of TPoint;
    procedure abc(x,y: integer; var ary: TPTAry);
    var
      x1,x3,y1,y3: integer;
    begin
      x1 := x-1;
      x3 := x+1;
      y1 := y-1;
      y3 := y+1;
      ary[0] := Point(x1,y1);
      ary[1] := Point(x,y1);
      ary[2] := Point(x3,y1);
      ary[3] := Point(x1,y);
      ary[4] := Point(x3,y);
      ary[5] := Point(x1,y3);
      ary[6] := Point(x,y3);
      ary[7] := Point(x3,y3);
    end;
      

  5.   


    type TPTAry = array [0..7] of TPoint;
    procedure abc(x,y: integer; var ary: TPTAry);
    var
      x1,x3,y1,y3: integer;
    begin
      x1 := x-1;
      x3 := x+1;
      y1 := y-1;
      y3 := y+1;
      ary[0] := Point(x1,y1);
      ary[1] := Point(x,y1);
      ary[2] := Point(x3,y1);
      ary[3] := Point(x1,y);
      ary[4] := Point(x3,y);
      ary[5] := Point(x1,y3);
      ary[6] := Point(x,y3);
      ary[7] := Point(x3,y3);
    end;
      

  6.   

    Point(x,y)是调用函数来完成的
    Type
      TPoints7 = array [0..7] of TPoint;procedure GetNeighbor(X,Y:Integer; var Neighbors : TPoints7);assembler;
    asm
      MOV  [ECX + 8*1 + 0] , EAX
      MOV  [ECX + 8*6 + 0] , EAX  MOV  [ECX + 8*3 + 4] , EDX
      MOV  [ECX + 8*4 + 4] , EDX  DEC  EDX
      MOV  [ECX + 8*0 + 4] , EDX
      MOV  [ECX + 8*1 + 4] , EDX
      MOV  [ECX + 8*2 + 4] , EDX
      INC  EDX
      INC  EDX
      MOV  [ECX + 8*5 + 4] , EDX
      MOV  [ECX + 8*6 + 4] , EDX
      MOV  [ECX + 8*7 + 4] , EDX  DEC  EAX
      MOV  [ECX + 8*0 + 0] , EAX
      MOV  [ECX + 8*3 + 0] , EAX
      MOV  [ECX + 8*5 + 0] , EAX
      INC  EAX
      INC  EAX
      MOV  [ECX + 8*2 + 0] , EAX
      MOV  [ECX + 8*4 + 0] , EAX
      MOV  [ECX + 8*7 + 0] , EAX
    end;