मैं एक कार्टेशियन के लिए एक गोलाकार समन्वय का अनुवाद कैसे करूं?


10

क्या कोई मुझे सही दिशा में इंगित कर सकता है कि यह कैसे प्राप्त किया जा सकता है? 3 डी गणित / ज्यामिति अक्सर मुझे फेंकता है।

मैं इस तरह से कुछ देख रहा हूँ (आदर्श रूप से C # में):

public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
   return ????;
}

जवाबों:


5

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

वास्तव में क्या था ... बस यह पता लगाने की आवश्यकता है कि एकता गणित के बिना यह कैसे करना है ... कोई भी .Net के लिए आवश्यक ब्याज पर सिफारिश करता है ... या यह कहीं में बनाया गया है? मैं केवल डबल्स के लिए इन कार्यों को देख सकता था।
वार

10

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

गोलाकार निर्देशांक


आपको अपने उत्तर में (शाब्दिक) ग्रीक के अर्थ के बारे में विस्तार से बताना चाहिए।
सेठ बट्टिन

@SethBattin सुझाव के लिए धन्यवाद! जवाब अपडेट कर दिया गया है।
MLM

2
जिसे आप झुकाव कहते हैं, वह संभवतः ओपी के उत्थान के लिए क्या मायने रखता है , का पूरक है । वेक्टर से x अक्ष तक वेक्टर से z अक्ष पर नहीं।
MestreLion

0

यदि 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पहले पैरामीटर के रूप में एक अधिक पारंपरिक आदेश होगा ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.