【发布时间】:2017-02-13 21:38:18
【问题描述】:
在二维矩阵中,我想通过其 ID 分别找到一个直接连接的邻居。
我的意思是:
x0 = x
y0 = y - 1
x1 = x + 1
y1 = y
x2 = x
y2 = y + 1
x3 = x - 1
y3 = y
或作为图形:
╔═══════╗
║ N ║
║ x,y-1 ║
║ ║
╔═══════╬═══════╬═══════╗
║ W ║ ║ E ║
║ x-1,y ║ x,y ║ x+1,y ║
║ ║ ║ ║
╚═══════╬═══════╬═══════╝
║ S ║
║ x,y+1 ║
║ ║
╚═══════╝
几年前,当我开始编程时,我遇到了同样的问题,并用一个丑陋的开关盒解决了这个问题,可以大大改进:
if (mode == 'Y'){
switch(direction){
case 1:
return -1;
case 2:
return 0;
case 3:
return 1;
case 4:
return 0;
default:
break;
}
}
if (mode == 'X'){
switch(direction){
case 1:
return 0;
case 2:
return 1;
case 3:
return 0;
case 4:
return -1;
default:
break;
}
}
一个单元格应该可以通过带有 x,y 和方向(N,E,S,W 例如 0-3)的单个公式访问
我不想拥有所有的邻居,比如定义它周围的空间(x-1,y-1 到 x+1,y+1)。这将是一种简单的迭代扔正方形。我只想要一个单元格。
这听起来很简单,但让我头疼的是要找到一个简短、快速且合法的解决方案。首选语言是 C++
我对您的解决方案感到兴奋!
编辑
我现在发现了问题。
看看这个:Graph
遗憾的是,我还不允许发布图像,但正如您所见,图表与表示方向的常量的交集正是必须添加到 x 坐标的内容,如上所示
这意味着,我们可以使用一个简单的正弦波来获得 y,由此得出的公式是:
x1 = x + cos((2*pi*(dir-1))/4)
y1 = y + cos((2*pi*(dir-2))/4)
而dir 是从 0 到 3
这就是我找到一种计算连接邻居的纯数学方法的解决方案。当然这可以通过某种方式得到证实?
感谢您的解决方案!期待看到您对此问题的解决方案!
干杯!
【问题讨论】:
-
欢迎来到 SO!请解释您在当前解决方案中遇到的问题以及您认为“正确”的解决方案。
-
离题:“一个单元格应该可以通过带有 x,y 和方向 (N,E,S,W 例如 0-3) 的单个公式访问”建议使用
enum替换数字 0..3 具有漂亮、易于阅读的名称。
标签: c++ math matrix 2d formula