谁能用最简单的最快速的方法,得到这个点周围的8个坐标,UP~UP~UP~UP~UP~有分 一个坐标点X=100 Y200谁能用最简单的最快速的方法,得到这个点周围的8个坐标,UP~UP~UP~UP~UP~有分X,Y-1X,Y+1X-1,YX+1,YX-1,Y-1X+1,Y-1X+1,Y+1X-1,Y+1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设计一个类,核心是一个 array[0..7] of tpoint; 这个坐标是动态的,我准备写个Function传进一个XY坐标,result返回一个数组,这个数组就放这个坐标点的旁边8个坐标值睡觉去了等待最方便最快速的算法 Fast就用basm;或者先进行inc或dec然后直接赋值,虽然代码长点,效率比循环快. 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; 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; 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] , EAXend; 散分喽~~~ SeSkin的控件是属于那个控件包的? 如何关闭一个已知文件名的程序? 请教一个画布的问题! 我想在程序的运行过程中,比如说按 F10 键便呼出一窗体!up有分! 高分求解二进制文件存取问题,解决立即给分 三层结构中应用服务器的分发问题,绝非老调重弹,请高手指点 SPComm的问题,请大虾解决,急!急!急!十万火急!!! dbgrid的属性buttonstyle 如何使Listview支持100*100的大图标? 关于delphi 动态数组赋值问题!!请人进啊!! delphi listview添加行,弹出list index out of bounds(6)窗口
这个数组就放这个坐标点的旁边8个坐标值
睡觉去了
等待最方便最快速的算法
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;
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;
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;