開発したアプリなど一覧

正多角形 をスクリプトから生成してみる

アフィリエイトリンクを含む場合があります

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; } }

結果はこんな感じに。

regularpolygon

Sponsored Link

コメント

タイトルとURLをコピーしました