java - 计算长方体网格上的点
问题描述
我在这里的数学技能有问题。所以我需要计算每个轴上特定数量的点的位置(x,y,z)。例如这张图片
final double gapX = lengthX / dotsPerXAxis;
final double gapY = lengthY / dotsPerYAxis;
final double gapZ = lengthZ / dotsPerZAxis;
for (BlockFace blockFace : BlockHandler.DIRECT_RELATIVES) {
final DecimalVector3D minCorner = new DecimalVector3D(
blockFace.getModX(),
blockFace.getModY(),
blockFace.getModZ()
);
for (int x = 0; x < dotsPerXAxis || x == 0; x++) {
for (int y = 0; y < dotsPerYAxis; y++) {
for (int z = 0; z < dotsPerZAxis; z++) {
}
}
}
我现在的问题是:除了长方体内部的点之外,我如何遍历所有点并计算它们的位置并将它们放入 ImmutableList 中?
解决方案
如果点的至少一个坐标为零或 ,则需要对其进行处理dotsPerZAxis
。
所以设置标志 - 如果 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)
}
}
}
Ideone Python 工作代码作为概念验证给出n^3 - (n-2)^3
点(n=3 为 26 个表面点,n=4 为 56 个,n=5 为 98 个)