Создание проверки, которая должна пройти цикл от середины 3 переменных (x y z) - PullRequest
5 голосов
/ 26 февраля 2012
for (int ix = x - r; ix < x + r + 1; ix++) {
    for (int iz = z - r; iz < z + r + 1; iz++) {
        for (int iy = y - r; iy < y + r + 1; iy++) {
                       // if ix,iy,iz = something blah blah (this part isn't needed)
        }                           
    }
}

Хорошо, теперь вот проблема. Текущий код выше получает x, y, z и r (диапазон). Его задача - ссылаться через «куб», пока не будет выполнено определенное условие, которое я установил. Проблема заключается в том, что он начинается снаружи куба и в основном переходит от одного угла к другому.

Я ищу способ (моя математика / java мне не нравится), чтобы начать с позиции и делать петлю наружу от этой позиции (включая саму позицию), пока она не достигнет крайних границ куба.

Так что, если мы дали все поддельные значения, давайте используем x = 5, y = 5, z = 5, r = 2 код должен проверять 5,5,5 - 4,5,5 6,5,5 5,6,5 5,4,5 и т. д. и т. д. и т. д., в основном перебирая все по направлению от центра.

Команда называется FindNearest, но технически она действует как FindFurthest atm.

Я надеюсь, что дал достаточно подробностей и был бы рад, если бы кто-нибудь бросил мне фрагменты кода или рабочий код, потому что это разочаровывает в течение последнего часа или около того. Я не хочу иметь 10, если проверки в середине для циклов или случайных вещей вроде этого, я ищу чистый способ сделать это.

1 Ответ

3 голосов
/ 26 февраля 2012

Вы можете выполнить итерацию из центра, выполнив что-то вроде этого:

for (ix = x, xsign = 1, xstep = 1; 
     (ix >= x - r) && (ix <= x + r);
     ix += xsign * xstep, xsign = -xsign, xstep++)

Так что ix для вашего примера будет идти от 5 до 6 до 4 до 7 и т. Д. Вы можете просто вкладывать циклыкак это, и вы получите то, что вы ищете, по крайней мере, если я правильно понимаю вопрос.

...