atan2
atan2 عنوان تابعی در زبانهای برنامهنویسی است که برای بدست آوردن آرکتانژانت به کار میرود، با این تفاوت که دارای دو آرگومان است. در این تابع اندازهٔ ضلعهای مقابل و مجاور به زاویهٔ قائم به صورت دو آرگومان جداگانه وارد میشوند (به جای یک عدد کسری واحد)؛ بدین شکل امکان تشخیص ربعی از دایرهٔ مثلثاتی که زاویه در آن قرار میگیرد برای تابع فراهم میشود.
در اکثر پیادهسازیهایی که از این تابع در زبانهای برنامهنویسی مختلف انجام شده است، y آرگومان اول و x آرگومان دوم تابع است. همچنین معمولاً در مبدأ مختصات، مقداری برای تابع تعریف نمیشود.[1]
در انسی سی، atan2 از روی مدل آن در فورترن مدلسازی شده است. در این مدل اگر آرگومان دوم تابع (x) صفر باشد، تابع خروجی صفر را تولید میکند، اما اگر مقدار هر دو ورودی x و y صفر باشد، خروجی به نحوهٔ پیادهسازی تابع بستگی خواهد داشت و ممکن است یک خروجی خوشمقدار مانند صفر تولید کند یا خطای دامنه بدهد؛ این آزادی به این علت داده شده است که هر دو خروجی در شرایط خاص ممکن است مفید باشند.[2]
مشکل آرکتانژانت
در حالتی که آرگومانها به صورت یک کسر واحد به تابع داده شوند، مقدار منتقلشده به تابع برای محاسبه، علامت ورودیها را حفظ نمیکند، برای مثال اگر x و y هردو منفی باشند (ربع سوم)، بر اثر خنثیشدن علامتهای صورت و مخرج، تابع تنها یک ممیز شناور مثبت را دریافت میکند، به طور مشابه امکان تشخیص بین ربع دوم و چهارم وجود ندارد. مشکل دیگر این روش آن است که مخرج کسر (x) نمیتواند صفر باشد، در حالی که در عمل x در دایرهٔ مثلثاتی ممکن است مقدار صفر داشته باشد ولی امکان مدلسازی آن در آرکتانژانتی که تنها یک آرگومان بگیرد وجود نخواهد داشت.[3]
برای حل این مشکل در پیادهسازی atan2 از دستورهای شرطی استفاده میکنند. به عنوان مثال یک پیادهسازی از تابع ممکن است به صورت زیر باشد:[4]
جستارهای وابسته
منابع
- Dunn and Parberry, 3D Math Primer for Graphics and Game Development, 2nd Edition, 120.
- Jones, The C Programmer's Companion: ANSI C Library Functions, 33.
- Dunn and Parberry, 3D Math Primer for Graphics and Game Development, 2nd Edition, 119.
- Dunn and Parberry, 3D Math Primer for Graphics and Game Development, 2nd Edition, 120.
- Dunn, F.; Parberry, I. (2011). 3D Math Primer for Graphics and Game Development, 2nd Edition. An A.K. Peters book. Taylor & Francis. ISBN 9781568817231. Retrieved 2013-11-01.
- Jones, R.S. (1991). The C Programmer's Companion: ANSI C Library Functions. Silicon Press. ISBN 9780929306094. Retrieved 2013-11-01.