ちょっと思いついた事をやる為に円周上/球体表面の座標を求める必要が出てきたので調べながらプログラムを書いてみた。
どちらも中心点は Vector3(0, 0, 0) としています。
座標を求め方は 極座標系 - Wikipedia にある公式をそのままプログラムにしています。
円周上のある一点を求める
あるオブジェクトを円状に配置する為に角度と半径から円周上のある位置を求めるメソッドを書いてみた。
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) を角度に渡して沢山生成すると円になる。
球体表面上のある一点を求める
同じようにあるオブジェクトを球状に配置する為に角度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 の公式をプログラムに書きなおしただけ。
これを利用し角度を調節してコンタクトレンズ状の形にオブジェクトをランダムに生成してみた。
ちゃんと動いてるっぽい。