我正在尝试编写一种算法,将任意四边形分割为更小的四边形,这些四边形都具有相同的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);
答案 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);
由于你没有告诉你如何定位它们,我保持这一部分是一样的。