円周上及び球体表面のある一点の座標を求める

シェアする

ちょっと思いついた事をやる為に円周上/球体表面の座標を求める必要が出てきたので調べながらプログラムを書いてみた。

どちらも中心点は Vector3(0, 0, 0) としています。

座標を求め方は 極座標系 - Wikipedia にある公式をそのままプログラムにしています。

Sponsored Links

円周上のある一点を求める

あるオブジェクトを円状に配置する為に角度と半径から円周上のある位置を求めるメソッドを書いてみた。

public Vector3 GetPosition(float angle, float radius) {
	float x = Mathf.Cos(angle * Mathf.Deg2Rad) * radius;
	float y = Mathf.Sin(angle * Mathf.Deg2Rad) * radius;
	return new Vector3 (x, y, 0);
}

三角関数を使えば良いだけなので簡単。

Random.Range(0, 360) を角度に渡して沢山生成すると円になる。

circle

球体表面上のある一点を求める

同じようにあるオブジェクトを球状に配置する為に角度2つと半径から球上のある位置を求めるメソッドを書いてみた。

public Vector3 GetPosition(float angle1, float angle2, float radius) {
		float x = radius * Mathf.Sin(angle1 * Mathf.Deg2Rad) * Mathf.Cos(angle2 * Mathf.Deg2Rad);
		float y = radius * Mathf.Sin(angle1 * Mathf.Deg2Rad) * Mathf.Sin(angle2 * Mathf.Deg2Rad);
		float z = radius * Mathf.Cos(angle1 * Mathf.Deg2Rad);
		return new Vector3(x, y, z);
}

上記 Wikipedia の公式をプログラムに書きなおしただけ。

これを利用し角度を調節してコンタクトレンズ状の形にオブジェクトをランダムに生成してみた。

sphere

ちゃんと動いてるっぽい。

Sponsored Link

シェアする

フォローする