作者tkcn (小安)
看板java
标题Re: [问题] 关於附近点的判定
时间Wed Jun 16 15:23:13 2010
※ 引述《money1943 (小猪)》之铭言:
: 小弟要做一个 5*5的矩阵
: setLayout(new GridLayout(5, 5));
: 摆满按钮
: 已宣告好五个不重复的随机变数int sum[5]
: 要做类似踩地雷的功能
: 如果想做到例如点是..
: 0 1 5 6 7(随机)
後来终於看懂了,一开始没把上面这串当成是位置。
虽然我看过很多人都习惯用一维阵列处理这种问题,
不过我觉得二维阵列比较容易理解 (也比较容易处理边缘问题)
所以这里就先转成二维吧,因此上述五个座标就变成:
(0, 0) (0, 1)
(1, 0) (1, 1) (1, 2)
假设现在要找到 (x, y) 的八个 neighbors,
你可以直接宣告两组阵列: (向量)
int[] dx = {0, -1, -1, -1, 0, 1, 1, 1};
int[] dy = {-1, -1, 0, 1, 1, 1, 0, -1};
// 依序分别是 上, 左上, 左, ..., 右上
把 (x, y) 分别和这些向量相加,你就可已达到八个 neighbors 的座标了。
通常在四相邻的图中我比较爱用上面的方式,
如果是八相邻的话我通常会这样用:
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++)
if(dx!=0 || dy!=0){
// do something ...
}
剩下来你唯一要注意的,就是如何处理超出边界的问题了,good luck!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.50.250
※ 编辑: tkcn 来自: 61.230.50.250 (06/16 15:24)
1F:推 slalala:我的做法 隐藏边界 科科 06/16 17:57
2F:推 PsMonkey:啧啧... 从来没想过说 XDXD 06/16 21:43
3F:→ tkcn:一起来参加 code jam 吧 (招手) 06/16 23:05
4F:→ TonyQ:我一直以为这是标准作法...-.-;;当初写题目的直觉 06/17 00:44
5F:→ tkcn:那来个诡异的作法 XD 先初始一个向量然後用 rotation matrix 06/17 01:08
6F:→ tkcn:如果是四相邻的话,code 还蛮精简的 06/17 01:10
7F:推 spring0417:推围墙 06/17 04:48