我正在尝试使用循环创建一个空心金字塔。我想要接近这个的方法是从某个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个街区的楼梯
答案 0 :(得分:3)
请想象3轴的图形,如果你没有练习,只需看一下这个图。
我们将通过旋转轴将z用作高度,以便清楚地了解正在发生的事情。您也可以使用z作为深度参数,但是您将更难理解正在发生的事情。 你得到了错误的情节,因为你没有以正确的方式向空间移动..
你要找的是从一个点开始,比如说S =(x,y,z)=(5,5,5)你想要通过打印你的金字塔边缘来降低每个级别。 起点如下图所示
通过向下移动减少z,你想要绘制4个点(你可能想要绘制更多的点,我只是在这种情况下绘制边缘)。 所以在下一个周期你有z = z-1; 因此你必须在图表允许的4个方向上移动。
中间的点保持金字塔的中心,而其他点分别是
(5,4,4)(5,6,4) - &gt;沿y轴移动
(4,5,4)(6,5,4) - &gt;沿x轴移动
当你循环时,你继续移动它,在绘制金字塔的同时使用中心,水平(高度)和轴之间的差异作为指标。
怎么样?看到下面的最后一张图片,我添加了一些颜色来帮助你跟踪发生的事情。此外,我添加了轴和主点坐标。 红点保持金字塔的中心,从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在另一个方向上生长。