我如何将任意立方体细分为更小的立方体?

时间:2017-01-14 02:10:17

标签: c# math unity3d 3d geometry

我正在尝试编写一种算法,将任意四边形分割为更小的四边形,这些四边形都具有相同的x,y和z比例(因此,立方体)。现在我有代码将四边形分成自己的缩小版本,但我希望比例为1:1:1。我如何修改下面的代码呢?

for (int x=0; x < 2; x++) {
    for (int y=0; y < 2; y++) {
        for (int z=0; z < 2; z++) {
            GameObject newCube = Instantiate(gameObject);
            newCube.transform.localScale = new Vector3(
                newCube.transform.localScale.x/2,
                newCube.transform.localScale.y/2,
                newCube.transform.localScale.z/2
            );
            newCube.transform.position = new Vector3(
            newCube.transform.position.x + ((x-0.5f) * newCube.transform.localScale.x),
            newCube.transform.position.y + ((y-0.5f) * newCube.transform.localScale.y),
            newCube.transform.position.z + ((z-0.5f) * newCube.transform.localScale.z)
        );
    }
}
Destroy(gameObject);

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想从一个矩形制作正方形(实际上是那些3D的等价物,但无论如何)。

所以你的内部正方形必须有一个边,最多只有矩形的一半侧面。并且,由于它们是正方形,所有边必须具有相同的尺寸。因此,您必须找到x,y和z的较小边,并创建所有边设置为该值的一半的立方体。

将其添加到您的代码中:

for (int x=0; x < 2; x++) {
    for (int y=0; y < 2; y++) {
        for (int z=0; z < 2; z++) {
            GameObject newCube = Instantiate(gameObject);
            var cubeSize = Math.Min(oldQuad.x, Math.Min(oldQuad.y, oldQuad.z)) / 2;
            newCube.transform.localScale = new Vector3(
                cubeSize,
                cubeSize,
                cubeSize
            );
            newCube.transform.position = new Vector3(
            newCube.transform.position.x + ((x-0.5f) * newCube.transform.localScale.x),
            newCube.transform.position.y + ((y-0.5f) * newCube.transform.localScale.y),
            newCube.transform.position.z + ((z-0.5f) * newCube.transform.localScale.z)
        );
    }
}
Destroy(gameObject);

由于你没有告诉你如何定位它们,我保持这一部分是一样的。

相关问题