আমি কীভাবে কোনও কার্তেসিয়ানকে একটি গোলকীয় স্থানাঙ্কটি অনুবাদ করব?


10

কেউ কীভাবে আমাকে সঠিক দিক নির্দেশ করতে পারে যে এটি কীভাবে অর্জন করা যেতে পারে? 3 ডি গণিত / জ্যামিতি প্রায়শই আমাকে ছুড়ে ফেলে।

আমি এর মতো কিছু খুঁজছি (আদর্শভাবে সি # তে):

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

ঠিক পরে কী ছিল ... কেবল maক্য গণিতের লিবস ছাড়াই এটি কীভাবে করা যায় তা অনুধাবন করা দরকার ... নেট জন্য কোনও গণিতের লিবসের জন্য কোনও সুপারিশ করা হয় ... বা এটি কোথাও নির্মিত হয়েছে? আমি কেবল ডাবলসের জন্য এই ফাংশনগুলি দেখতে পেতাম।
যুদ্ধ

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

গোলাকার স্থানাঙ্ক


আপনার উত্তরে (আক্ষরিক) গ্রীকটির অর্থ সম্পর্কে বিশদ বিবরণ দেওয়া উচিত।
শেঠ ব্যাটিন

@ শেঠব্যাটিন পরামর্শের জন্য আপনাকে ধন্যবাদ! উত্তর আপডেট করা হয়েছে।
এমএলএম

2
আপনি যাকে ঝোঁক বলছেন সম্ভবত ওপরের উন্নয়নের জন্য অর্থ কী তার পরিপূরক । xy বিমান থেকে ভেক্টর পর্যন্ত কোণ, ভেক্টর থেকে 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 ডি সমন্বয় ব্যবস্থা (আর, θ) বোঝায় । ভেক্টরের বিশালতা সাধারণত হিসাবে উল্লেখ করা হয়radius
  • আরও প্রচলিত আদেশে radiusপ্রথম প্যারামিটার হিসাবে থাকবে ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.