В 2D-матрице я хочу найти единственного непосредственно связанного соседа по его идентификатору, соответственно.Как найти непосредственно связанного соседа в 2D-матрице?
Что я имею в виду:
х0 = х
у0 = у1
x1 = х + 1
у1 = у
х2 = х
у2 = у + 1
х3 = х - 1
у3 = у
или в качестве графического:
╔═══════╗
║ 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;
}
}
Клетка должна быть доступной по одной формуле с х, у и направление (N, E, S, W eg 0-3)
Я не хочу иметь всех соседей, как определение пространства вокруг него (x-1, y-1 до x + 1, y + 1). Это было бы просто, просто повторив квадрат. Я просто хочу одну ячейку.
Это звук прост, но дает мне головные боли в поиске короткого, быстрого и законного решения. Предпочтительным языком является C++
Я очень рад вашим решениям!
EDIT
я понял, проблема в настоящее время.
Взгляните на это: Graph
К сожалению, им пока не разрешается размещать изображения, но, как вы можете увидеть пересечение графика с константами, представляющих направление именно то, что нужно добавить к й координатам, вы можете увидеть выше
Это означает, что мы можем использовать простую гармоническую волну для получения у и от этого формулы являются:
x1 = x + cos((2*pi*(dir-1))/4)
y1 = y + cos((2*pi*(dir-2))/4)
Хотя dir
от 0 до 3
Это мое решение в поиске чистого математического метода расчета связанных соседей. Конечно, это может быть кое-что одобрено?
Спасибо за ваши решения! Ждем ваших решений по этой проблеме!
Cheers!
Добро пожаловать на ТАК! Пожалуйста, объясните, что у вас есть в настоящем решении и что вы считаете «правильным» решением. –
Отключить тему: «Клетка должна быть доступна по одной формуле с x, y и направлением (N, E, S, W, например, 0-3)», рекомендуется использовать «enum» для замены числового 0..3 на приятные, легко читаемые имена. – user4581301