2017-01-14 6 views
0

Я пытаюсь написать алгоритм, который будет разбивать произвольный квадрант на меньшие квадратики, все из которых имеют одинаковые масштабы 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

уточнить .. произвольный QUAD (должен быть) плоский объект с 4 вершинами. Масштабированный QUAD не является квадратным или кубическим. Если вы действительно хотите кубы вместо этого, вы говорите о сетках, а не о QUAD. Итак, что это (что конкретно представляет собой пример ввода)? Также, сколько квадратов/кубов/QUADS вы хотите в подразделении (на основе области/объема/размера, постоянной, как 4, другой)? Ответ действительно различен для каждой комбинации этого. Изменено название, чтобы оно соответствовало вашему коду – Spektre

ответ

0

Если я вас правильно понял, вы хотите, чтобы сделать квадраты из прямоугольника (на самом деле 3D эквивалент тех, но любой другой).

Таким образом, ваши внутренние квадраты должны иметь сторону, самое большее, половину стороны SMALLER прямоугольника. И, поскольку они квадраты, все стороны должны иметь одинаковый размер. Итак, вы должны найти, какая меньшая сторона 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); 

Так как вы ничего не сказали о том, как вы хотите расположить их, я все, что часть то же самое.