কম্পিউটার টিউটোরিয়াল

C#-এ Math.Atan2() মেথড: দুই সংখ্যার অনুপাত থেকে কোণ নির্ণয়


C#-এ Math.Atan2() মেথডটি دوটি নির্দিষ্ট সংখ্যার ভাগফল (y/x) কে ট্যানজেন্ট হিসেবে ধরে, সংশ্লিষ্ট কোণ (রেডিয়ানে) ফেরত দেয়। এটি সঠিক কোণ নির্ণয়ের জন্য চতুর্থাংশ (quadrant) বিবেচনা করে, যা Math.Atan(y/x)-এর চেয়ে নির্ভরযোগ্য।

সিনট্যাক্স (Syntax)

public static double Atan2(double y, double x);

প্যারামিটার:

  • y - y-কর্ডিনেট (লম্বাংশ)
  • x - x-কর্ডিনেট (বাড়াংশ)

উদাহরণ ১: (3, 1) বিন্দুর কোণ

using System;

public class Demo
{
    public static void Main()
    {
        double y = 3.0;
        double x = 1.0;
        
        double radians = Math.Atan2(y, x);
        double degrees = radians * (180 / Math.PI);
        
        Console.WriteLine("Result = " + degrees);
    }
}

আউটপুট

Result = 71.565051177078

উদাহরণ ২: অক্ষের ওপর (x=5, y=0)

using System;

public class Demo
{
    public static void Main()
    {
        double y = 0;
        double x = 5;
        
        double radians = Math.Atan2(y, x);
        double degrees = radians * (180 / Math.PI);
        
        Console.WriteLine("Result = " + degrees);
    }
}

আউটপুট

Result = 0

Atan2() vs Atan() - কেন Atan2 ভালো?

পারামিটারMath.Atan(y/x)Math.Atan2(y, x)
ইনপুটএকটি অনুপাত (y/x)দুটি আলাদা মান (y, x)
চতুর্থাংশ জানতে পারে?না (সুতরাং ±90°-এ সীমাবদ্ধ)হ্যাঁ (পূর্ণ ৩৬০° / -১৮০° থেকে ১৮০°)
x = 0 হ্যান্ডলিংDivideByZeroException বা Infinityসঠিকভাবে ±90° ফেরত দেয়
(0,0) হ্যান্ডলিংNaN0 ফেরত দেয়

চতুর্থাংশ অনুযায়ী ফলাফল

using System;

public class QuadrantDemo
{
    public static void Main()
    {
        var points = new (double x, double y)[]
        {
            (1, 1),    // Q1: 45°
            (-1, 1),   // Q2: 135°
            (-1, -1),  // Q3: -135° (or 225°)
            (1, -1),   // Q4: -45° (or 315°)
            (0, 1),    // +Y axis: 90°
            (0, -1),   // -Y axis: -90°
            (1, 0),    // +X axis: 0°
            (-1, 0),   // -X axis: 180° (or -180°)
            (0, 0)     // Origin: 0
        };
        
        foreach (var (x, y) in points)
        {
            double rad = Math.Atan2(y, x);
            double deg = rad * 180 / Math.PI;
            Console.WriteLine($"Atan2({y,3}, {x,3}) = {deg,7:F2}°");
        }
    }
}

আউটপুট

Atan2(  1,   1) =   45.00°
Atan2(  1,  -1) =  135.00°
Atan2( -1,  -1) = -135.00°
Atan2( -1,   1) =  -45.00°
Atan2(  1,   0) =   90.00°
Atan2( -1,   0) =  -90.00°
Atan2(  0,   1) =    0.00°
Atan2(  0,  -1) =  180.00°
Atan2(  0,   0) =    0.00°

প্রয়োগিক ব্যবহার: ২D ভেক্টর/গেম ডেভেলপমেন্ট

public class Vector2
{
    public double X, Y;
    
    public double Angle => Math.Atan2(Y, X); // রেডিয়ানে
    public double AngleDegrees => Angle * 180 / Math.PI;
    
    public static double AngleBetween(Vector2 a, Vector2 b)
    {
        double dot = a.X * b.X + a.Y * b.Y;
        double det = a.X * b.Y - a.Y * b.X;
        return Math.Atan2(det, dot); // সাইনড কোণ
    }
}

// ব্যবহার: প্লেয়ারের দিকে enimy ঘুরানো
Vector2 playerPos = new Vector2(100, 100);
Vector2 enemyPos = new Vector2(50, 50);
Vector2 direction = new Vector2(playerPos.X - enemyPos.X, playerPos.Y - enemyPos.Y);
double angleToPlayer = direction.AngleDegrees;

বিশেষ মানের আউটপুট

  • Atan2(0, 0) → 0
  • Atan2(+0, -0) → π (180°)
  • Atan2(-0, -0) → -π (-180°)
  • Atan2(y, +∞) → ±0
  • Atan2(y, -∞) → ±π
  • Atan2(+∞, x) → π/2 (90°)
  • Atan2(-∞, x) → -π/2 (-90°)

সারসংক্ষেপ: Math.Atan2(y, x) হলো ২D জ্যামিতি, গ্রাফিক্স, ফিজিক্স এবং নেভিগেশনে কোণ নির্ণয়ের স্ট্যান্ডার্ড এবং সবচেয়ে নিরাপদ পদ্ধতি।

  1. C#-এ Math.Tanh() মেথড

  2. C#-এ Math.Log10() মেথড

  3. C#-এ Math.Log() মেথড

  4. C#-এ Math.IEEERemainder() মেথড