primitive な box を利用して正多角形を生成してみる。
正多角形の生成するために必要な公式
正多角形を生成するには、「内接円の半径」と「円に外接する正多角形の辺の長さ」を求める公式が必要になります。
円に外接する正 n 角形の辺の長さの公式は
2 * Radius * Tan(π / n)
となります。
ちなみに Tan を Sin に変更したら「円に内接する正多角形の辺の長さ」になります。
正多角形の生成
あとは上記の公式を元に正多角形を生成するだけです。
public class CreateRegularPolygon : MonoBehaviour {
int side = 3;
float sideBold = 5f;
float radius = 50f;
void Start () {
StartCoroutine(Create());
}
IEnumerator Create() {
int posz= 0;
while(true) {
float sideLength = 2 * radius * Mathf.Tan(Mathf.PI/(float)side);
Vector3 boxScale = new Vector3(sideLength, sideBold, sideBold);
float angle = 360 / (float)side;
GameObject ring = new GameObject();
ring.transform.position = new Vector3(0, 0, posz * 10);
for (int i=0; i<side; i++) {
float _angle = angle * i;
Vector3 pos = GetSidePosition(_angle, radius);
GameObject box = GameObject.CreatePrimitive(PrimitiveType.Cube);
box.transform.parent = ring.transform;
box.transform.localPosition = pos;
box.transform.Rotate(0, 0, -_angle);
box.transform.localScale = boxScale;
}
posz++;
side++;
yield return 0;
}
yield break;
}
public Vector3 GetSidePosition(float angle, float radius) {
float sin = Mathf.Sin(angle * Mathf.Deg2Rad) * radius;
float cos = Mathf.Cos(angle * Mathf.Deg2Rad) * radius;
Vector3 position = new Vector3 (sin, cos, 0);
return position;
}
}
結果はこんな感じに。
コメント