使用循环在Java中创建金字塔

时间:2014-10-19 07:47:55

标签: java minecraft

我正在尝试使用循环创建一个空心金字塔。我想要接近这个的方法是从某个Y开始,然后将它减少1,同时在覆盖周长的同时将X和Z向外扩展一个。

    *
   * *
  *   *
 *     *
*       *

当然,这将是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个街区的楼梯

2 个答案:

答案 0 :(得分:3)

请想象3轴的图形,如果你没有练习,只需看一下这个图。

x y z axis

我们将通过旋转轴将z用作高度,以便清楚地了解正在发生的事情。您也可以使用z作为深度参数,但是您将更难理解正在发生的事情。 你得到了错误的情节,因为你没有以正确的方式向空间移动..

你要找的是从一个点开始,比如说S =(x,y,z)=(5,5,5)你想要通过打印你的金字塔边缘来降低每个级别。 起点如下图所示 enter image description here

通过向下移动减少z,你想要绘制4个点(你可能想要绘制更多的点,我只是在这种情况下绘制边缘)。 所以在下一个周期你有z = z-1; 因此你必须在图表允许的4个方向上移动。 enter image description here

中间的点保持金字塔的中心,而其他点分别是

(5,4,4)(5,6,4) - &gt;沿y轴移动

(4,5,4)(6,5,4) - &gt;沿x轴移动

当你循环时,你继续移动它,在绘制金字塔的同时使用中心,水平(高度)和轴之间的差异作为指标。

怎么样?看到下面的最后一张图片,我添加了一些颜色来帮助你跟踪发生的事情。此外,我添加了轴和主点坐标。 enter image description here 红点保持金字塔的中心,从S =(5,5,5)开始(这是顶部)你下到S1 =(5,5,4)和S2 =(5,5,3) ..所以想象这是你的while循环的2个cicles。 当z = 4时,绿点跟踪第一个周期, 这次金字塔的中心是S1。您希望通过在y轴和x轴上移动来扩展空间。

在中心你移动-1和 - + 1在y ..所以获得(5,4,4)和(5,6,4)。到目前为止,您获得了2条边。让我们在x轴上移动保持中心原样,这次你向这样的平面移动1个单位,这样你就可以得到(6,5,4)和(4,5,4).. 第二个周期也是如此。你移动的距离是通过

获得的
starting height - actual level height

在z = 3的情况下,你必须从中心乘5 - 3 = 2个单位(按前面的陈述) 等到周期的剩余时间,直到你最终为止。 您可能想要从中心停止0个单位(当开始高度==实际水平高度时)通过获得一个漂亮且精心绘制的金字塔,其他明智的你可以保持骑自行车,但你必须找到另一种方法来停止,前一个减法实际上也可以使用负高度,你可以注意到,如果你达到z = -1,前一个将告诉你移动6个单位,在这种情况下你必须找到另一种方法来停止和打破你的周期。

这说你必须调整你的周期来绘制4点,而不是那些你实际绘制的点数=)

答案 1 :(得分:0)

你只能从一侧走下楼梯。另一方面,x和z在另一个方向上生长。