Java 计算长方体上的点';s网格

Java 计算长方体上的点';s网格,java,math,bukkit,Java,Math,Bukkit,我对我的数学技能有意见。所以我需要计算每个aix中特定数量点的位置(x,y,z)。以这张图片为例 final double gapX=lengthX/dotsPerXAxis; 最终双间隙=长/点主轴; 最终双gapZ=长度z/dotsPerZAxis; for(BlockFace BlockFace:BlockHandler.直系亲属){ 最终DecimalVector3D最小角=新DecimalVector3D( blockFace.getModX(), blockFace.getModY(

我对我的数学技能有意见。所以我需要计算每个aix中特定数量点的位置(x,y,z)。以这张图片为例

final double gapX=lengthX/dotsPerXAxis;
最终双间隙=长/点主轴;
最终双gapZ=长度z/dotsPerZAxis;
for(BlockFace BlockFace:BlockHandler.直系亲属){
最终DecimalVector3D最小角=新DecimalVector3D(
blockFace.getModX(),
blockFace.getModY(),
blockFace.getModZ()
);
对于(int x=0;x

我现在的问题是:除了长方体内部的点之外,我如何迭代所有的点,计算它们的位置,并将它们放入一个不可变列表中?

如果点的至少一个坐标为零或
点的坐标
,则需要处理该点

因此,设置标志-如果X坐标位于面上,如果Y坐标位于面上。如果未设置两个标志,则仅获取第一个和最后一个Z坐标,否则遍历所有Z坐标

未选中的Java:

for (int x = 0; x < dotsPerXAxis; x++) {
    bool atX = (x == 0) || (x == dotsPerXAxis - 1);
    for (int y = 0; y < dotsPerYAxis; y++) {
        bool atY = (y == 0) || (y == dotsPerYAxis - 1);

        int zstep = (atX || atY)? 1: dotsPerZAxis - 1;

        for (int z = 0; z < dotsPerZAxis; z+=zstep) {
           treat(x,y,z)
        }
    }
}
for(int x=0;x

给出
n^3-(n-2)^3点
点(n=3的曲面点为26点,n=4的曲面点为56点,n=5的曲面点为98点)

基于MBo的帮助,我找到了这个答案

    for (BlockFace blockFace : BlockHandler.DIRECT_RELATIVES) {
        for (int x = 0; x < dotsPerXAxis || x == 0 || x == dotsPerXAxis - 1; x++) {
            for (int y = 0; y < dotsPerXAxis || y == 0 || y == dotsPerYAxis - 1; y++) {
                for (int z = 0; z < dotsPerXAxis || z == 0;
                     z += (y == 0 || y == dotsPerYAxis - 1) || (x == 0 || x == dotsPerXAxis - 1) ? 1 :
                         dotsPerZAxis - 1) {

                    results.add(new DecimalVector3D(
                        x,
                        y,
                        z
                    ));
                }
            }
        }
    }
for(BlockFace BlockFace:BlockHandler.DIRECT\u亲属){
对于(int x=0;x
这只是给Meals抛出了一个java堆异常,所以我想你忘了我只需要外部的点,而必须忽略内部的点。哦,我没有忘记。你可以在ideone看到Python代码只生成外部点。我不懂java,所以最好理解这种方法并进行更正。所有这些都没有意义se插入了for的:
| x==0 | | x==dotsPerXAxis-1
。而且……奇怪的是,当所有有意义的逻辑都出现在我的文章中时,你确实标记了自己的答案。我专门问了java,所以我用相应的java代码OMG回答了这个问题……当你实现自己的想法时,标记自己的解决方案是非常好的。但这里你有重写了我的代码(保留复制粘贴错误-我刚刚纠正了y和z中的dotsPerXAxis),并添加了不必要的条件。。。
    for (BlockFace blockFace : BlockHandler.DIRECT_RELATIVES) {
        for (int x = 0; x < dotsPerXAxis || x == 0 || x == dotsPerXAxis - 1; x++) {
            for (int y = 0; y < dotsPerXAxis || y == 0 || y == dotsPerYAxis - 1; y++) {
                for (int z = 0; z < dotsPerXAxis || z == 0;
                     z += (y == 0 || y == dotsPerYAxis - 1) || (x == 0 || x == dotsPerXAxis - 1) ? 1 :
                         dotsPerZAxis - 1) {

                    results.add(new DecimalVector3D(
                        x,
                        y,
                        z
                    ));
                }
            }
        }
    }