जवाबों:
http://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/
public static void SphericalToCartesian(float radius, float polar, float elevation, out Vector3 outCart){
float a = radius * Mathf.Cos(elevation);
outCart.x = a * Mathf.Cos(polar);
outCart.y = radius * Mathf.Sin(elevation);
outCart.z = a * Mathf.Sin(polar);
}
public static void CartesianToSpherical(Vector3 cartCoords, out float outRadius, out float outPolar, out float outElevation){
if (cartCoords.x == 0)
cartCoords.x = Mathf.Epsilon;
outRadius = Mathf.Sqrt((cartCoords.x * cartCoords.x)
+ (cartCoords.y * cartCoords.y)
+ (cartCoords.z * cartCoords.z));
outPolar = Mathf.Atan(cartCoords.z / cartCoords.x);
if (cartCoords.x < 0)
outPolar += Mathf.PI;
outElevation = Mathf.Asin(cartCoords.y / outRadius);
}
r
: रेडियल दूरीθ
: झुकावφ
: अजीमुथविकिपीडिया के माध्यम से
public Vector3 getCartesianFor(float radius, float inclination, float azimuth)
{
return new Vector3(radius*Sin(inclination)*Cos(azimuth), radius*Sin(inclination)*Sin(azimuth), radius*Cos(inclination));
}
यदि polar
आप वेक्टर के परिमाण से मतलब रखते हैं, और elevation
वेक्टर और एक्स प्लेन (जैसा कि नाम से पता चलता है) के बीच के कोण के रूप में परिभाषित किया जाता है, तो समारोह होगा:
public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
return new Vector3(polar*Cos(elevation)*Cos(asimuth),
polar*Cos(elevation)*Sin(asimuth),
polar*Sin(inclination));
}
ध्यान दें कि यह एमएलएम के उत्तर के समान है, यह सब इस बात पर निर्भर करता है कि आप अपने elevation
कोण को कैसे परिभाषित करते हैं । मैंने आपके फ़ंक्शन टेम्प्लेट हस्ताक्षर का भी सम्मान किया है, लेकिन मैं कुछ बदलावों का सुझाव देता हूं:
asimuth
एक टाइपो है, सही वर्तनी होगी azimuth
polar
आमतौर पर 2 डी समन्वय प्रणाली (आर, coord) को संदर्भित करता है । वेक्टर की भयावहता को सामान्यतः कहा जाता हैradius
radius
पहले पैरामीटर के रूप में एक अधिक पारंपरिक आदेश होगा ।