2014-10-19 3 views
0

Я пытаюсь создать полую пирамиду, используя цикл. То, как я хотел бы подойти к этому, - начать с некоторого Y и уменьшить его на 1, а при увеличении X и Z на один прикрывая периметр.Использовать циклы для создания пирамиды в Java

* 
    * * 
    * * 
*  * 
*  * 

Предоставлено, что это будет 3D, используя XYZ.

Так что мой главный вопрос: если у меня есть 3 очка, X=50 Y=50 Z=50, как бы я спустился на каждом уровне Y, получая точки вокруг центра?

До сих пор

for (int y = 1; y<15; y++) { 
    l.setY(l.getY() - 1); 
    l.setX(l.getX() + 1); 
    l.setZ(l.getZ() + 1); 
    l.getBlock().setType(Material.GLASS); 
} 

будет генерировать только лестница сортов, идущих 15 блоков вниз из исходного положения

ответ

0

Вы идете по лестнице только одну сторону вниз. С другой стороны, x и z растут в другом направлении.

3

Пожалуйста, представьте себе график оси 3, если вы не практикуете с ним, просто взгляните на этот график.

x y z axis

Мы будем использовать г в высоту путем вращения оси, чтобы иметь четкое представление о том, что происходит. Вы можете использовать z как параметр глубины, но вам будет сложнее понять, что происходит. Вы получаете неправильный сюжет, потому что вы не двигаетесь в нужное место.

Что вы ищете, начинайте с точки, скажем, S = (x, y, z) = (5,5 , 5), и вы хотите спуститься на каждый уровень, напечатав свои края для пирамиды. начальная точка на графике как показано на следующем рисунке enter image description here

Двигаясь вниз декремента г вы хотите нарисовать 4 точки (вы можете сделать некоторые больше, я просто нарисовать края в данном случае). , поэтому в следующем цикле у вас есть z = z-1; Таким образом, вам нужно перемещаться в 4 направлениях, разрешенных графиком. enter image description here

Точка в середине держит в центре пирамиды, в то время как другие являются соответственно

(5,4,4) (5,6,4) -> движется вдоль оси у

(4,5,4) (6,5,4) -> перемещение вдоль оси x

Во время цикла вы продолжаете перемещать это, используя в качестве показателей разницу между центром, уровнем (высотой) и ось при рисовании пирамиды.

КАК? см. последнюю следующую картинку, я добавил немного цвета, чтобы помочь вам отслеживать происходящее. Далее я добавил координаты оси и основных точек. enter image description here Красные точки сохраняют центр пирамиды, начиная с S = (5,5,5) (что является верхним), вы опускаетесь до S1 = (5,5,4) и S2 = (5,5 , 3) .. так что представьте, что это 2 cicles вашего цикла while. Зеленые точки отслеживают первый цикл, когда z = 4, центр пирамиды - это S1 на этот раз. Вы хотите расширить пространство, перемещаясь по оси y и x.

По центру вы перемещаете -1 и - + 1 на y .. поэтому получаете (5,4,4) и (5,6,4). Пока вы получаете 2 ребра. Давайте двигаться по оси x, сохраняя центр как есть, то же самое на этот раз вы двигаетесь на единицу к такой плоскости, чтобы у вас были (6,5,4) и (4,5,4) .. То же самое происходит с второй цикл. Расстояние при перемещении получается

starting height - actual level height 

в случае г = 3, вы должны от центра по 5 - 3 = 2 единицы (от предыдущего оператора) так далее, и так далее для остальной части цикла вверх до того, как вы закончите. Вы можете остановиться в 0 единицах смещения от центра (при стартовой высоте == высота фактического уровня), получив красивую и хорошо нарисованную пирамиду, иначе вы можете продолжать ездить на велосипеде, но вы должны найти другой способ остановиться, предыдущий вычитание на самом деле работает также с отрицательной высотой, вы можете заметить, что если вы достигнете z = -1, предыдущий скажет вам перевести 6 единиц, в этом случае вам нужно найти другой способ остановить и разбить свой цикл.

Это сказало, что вы должны настроить свой цикл, чтобы нарисовать 4 точки, вместо тех, что вы на самом деле рисуете =)

Смежные вопросы