如上图所示起点是左下角绿色的点,坐标是 0,0而红色位置是中心点,坐标是6,6我想要的是 获取红色点周围2坐标外的16个蓝色点而且是随机获取这16个点,并且不会重复,一直获取16次,就把所有的都获取完了。我自己写了个不太好,就是X+4 Y+4 获取左下角蓝色点然后for i:=0 to 4 do  从x+4 y+4 一直X+1就是把蓝色四周都for一下取到16个点在随机一个个取,取一个删除一个/貌似不太好,速度也不理想。谁有简单快速的方法吗?

解决方案 »

  1.   

    给你说一个思路:
    1.那16个点的坐标都是在中心点(6,6)的基础上XY轴加减正负2,故你只需要取X=Random(3),得到的结果是0 <= X < 3,即(0,1,2)这3个数,在这个随机数的基础上X * 2 -2,即得到(-2,0,2)作为坐标调整数。
    2.建立一个列表,用于保存随机得到的点的坐标,循环判断列表的个数小于16时,根据第一步随机产生的坐标调整数产生新的坐标,判断列表里面是否存在,存在则取下一个,不存在则插入列表,然后继续循环判断直到列表数量=16个结束。
    楼主拿分来!
      

  2.   

    有个小问题请教下要把这15个坐标放到数组var
      ZuoBiao:array[0..15] of TPoint;能直接设置默认值吗,比如Integer的数组 ZuoBiao2:array[0..15] of Integer=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); 
    就可以在全局变量时就带上默认值了
    TPoint能设置默认值吗?
      

  3.   

    //静态数组声明示例如下
    const
       ZuoBiao2: array[0..1] of TPoint =((X:0; Y:1), (X:0; Y:1));楼主如果点数可变的话, 就用动态数组实现.