*
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class LMath {
|
||||
public static float frac(float value){
|
||||
return value - (float)Mathf.FloorToInt(value);
|
||||
}
|
||||
}
|
||||
|
||||
public class SphericalCoordinate
|
||||
{
|
||||
private float polar;
|
||||
private float elevation;
|
||||
private Vector3 cartesian;
|
||||
|
||||
public float PolarAngle{
|
||||
get{ return polar; }
|
||||
set{ polar = value; UpdateCartesian(); }
|
||||
}
|
||||
|
||||
public float ElevationAngle{
|
||||
get{ return elevation; }
|
||||
set{ elevation = value; UpdateCartesian(); }
|
||||
}
|
||||
|
||||
public Vector3 Cartesian{
|
||||
get{ return cartesian; }
|
||||
set { UpdateSpherical(value); }
|
||||
}
|
||||
|
||||
public SphericalCoordinate(){
|
||||
UpdateCartesian();
|
||||
}
|
||||
|
||||
private void UpdateCartesian(){
|
||||
float a = Mathf.Cos(elevation);
|
||||
cartesian.x = a * Mathf.Cos(polar);
|
||||
cartesian.y = Mathf.Sin(elevation);
|
||||
cartesian.z = a * Mathf.Sin(polar);
|
||||
}
|
||||
|
||||
private void UpdateSpherical(Vector3 cartesianCoord){
|
||||
if (cartesianCoord.x == 0.0f)
|
||||
cartesianCoord.x = Mathf.Epsilon;
|
||||
float radius = Mathf.Sqrt((cartesianCoord.x * cartesianCoord.x)
|
||||
+ (cartesianCoord.y * cartesianCoord.y)
|
||||
+ (cartesianCoord.z * cartesianCoord.z));
|
||||
|
||||
polar = Mathf.Atan(cartesianCoord.z / cartesianCoord.x);
|
||||
if (cartesianCoord.x < 0.0f)
|
||||
polar += Mathf.PI;
|
||||
elevation = Mathf.Asin(cartesianCoord.y / radius);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user