Files
2025-05-13 05:18:03 +03:00

56 lines
1.3 KiB
C#

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