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

シェアする

primitive な box を利用して正多角形を生成してみる。

Sponsored Links

正多角形の生成するために必要な公式

正多角形を生成するには、「内接円の半径」と「円に外接する正多角形の辺の長さ」を求める公式が必要になります。

円に外接する正 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

シェアする

フォローする