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) হ্যান্ডলিং | NaN | 0 ফেরত দেয় |
চতুর্থাংশ অনুযায়ী ফলাফল
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)→ 0Atan2(+0, -0)→ π (180°)Atan2(-0, -0)→ -π (-180°)Atan2(y, +∞)→ ±0Atan2(y, -∞)→ ±πAtan2(+∞, x)→ π/2 (90°)Atan2(-∞, x)→ -π/2 (-90°)
সারসংক্ষেপ: Math.Atan2(y, x) হলো ২D জ্যামিতি, গ্রাফিক্স, ফিজিক্স এবং নেভিগেশনে কোণ নির্ণয়ের স্ট্যান্ডার্ড এবং সবচেয়ে নিরাপদ পদ্ধতি।