PDA

View Full Version : سوال: توابع مثلثاتی و معکوس مثلثاتی ( تبدیل مختصات دکارتی به قطبی)



mahak006
پنج شنبه 20 مهر 1391, 00:08 صبح
برای تبدیل مختصات دکارتی به قطبی به دو مؤلفه نیاز داریم : r و Teta
فرمول های تبدیل هم به این صورت هست :


r=(x^2+y^2)^(1/2)
Teta=arc tan(y/x)


حالا میخوام توابعی که تو C++ میتونن کمکم کنن تا این دو مؤلفه رو از روی مختصات دکارتی به دست بیارم اگه کسی میدونه بگه .
اگه تابعی هست که به طور اتوماتیک این کار رو انجام بده ، بگین . اگه نیست توابع معکوس مثلثاتی رو بگید .
پیشاپیش تشکر می کنم .

مسعود اقدسی فام
پنج شنبه 20 مهر 1391, 00:22 صبح
pow برای توان. مثلا (pow(3,2 که می‌شه نه.

atan یزای آرک تانژانت.

هر دو داخل math.h

mahak006
پنج شنبه 20 مهر 1391, 01:57 صبح
pow برای توان. مثلا (pow(3,2 که می‌شه نه.

atan یزای آرک تانژانت.

هر دو داخل math.h

یه سؤال دیگه . بره تغییر مختصات ، اگه x=1 و y=-1 باشه ، تو ناحیه 4 هستیم و اگه x=-1 و y=1 باشه تو ناحیه 2 . در حالی که تو محاسبه آرک تانژانت ، جفتش -1 وارد می شه . اینجا باید دو تا کمان میتونه باشه که احتمالا کامپایلر نمیتونه چک کنه . می تونی راهنمایی کنی که از طریق تابع آرک تانژانت یه تابع شخصی بسازم که بر این اساس زاویه درست رو ارائه بده ؟

مسعود اقدسی فام
پنج شنبه 20 مهر 1391, 11:13 صبح
یه سؤال دیگه . بره تغییر مختصات ، اگه x=1 و y=-1 باشه ، تو ناحیه 4 هستیم و اگه x=-1 و y=1 باشه تو ناحیه 2 . در حالی که تو محاسبه آرک تانژانت ، جفتش -1 وارد می شه . اینجا باید دو تا کمان میتونه باشه که احتمالا کامپایلر نمیتونه چک کنه . می تونی راهنمایی کنی که از طریق تابع آرک تانژانت یه تابع شخصی بسازم که بر این اساس زاویه درست رو ارائه بده ؟

آرک تانژانت از منفی پی دوم تا پی دوم. یعنی ۱۸۰ درچه ساپرت می‌کنه. بذار کمی اندیشه کنم!

مسعود اقدسی فام
پنج شنبه 20 مهر 1391, 11:49 صبح
وقتی x و y رو داری تشخیص ناحیه که راحته. یه شرط و در صورت نیاز جمع با ۱۸۰

Ananas
پنج شنبه 20 مهر 1391, 13:15 عصر
سلام.
از atan2 استفاده کنید. دقیقا برای همین منظور هست.

mjshaman
شنبه 25 آذر 1391, 01:12 صبح
سلام
من یه کدی نوشتم که توش یه عدد اعشاری میگیره و میده به تابع تانژانت و جوابشو نمایش میده، اما وقتی جواب این کد رو با جواب ماشین حساب ویندوز مقایسه میکنم میبینم خیلی احتلاف دارن, چرا؟
کسی میتونه راهنماییم کنه؟
و یه سوال دیگه, برای محاسبه ی لگاریتم در مبنای 2 باید از log2 استفاده کرد اما ویژوال استادیو 2010 این تابع رو نداره!
چیکارش میشه کرد؟

Ananas
شنبه 25 آذر 1391, 03:47 صبح
ن یه کدی نوشتم که توش یه عدد اعشاری میگیره و میده به تابع تانژانت و جوابشو نمایش میده، اما وقتی جواب این کد رو با جواب ماشین حساب ویندوز مقایسه میکنم میبینم خیلی احتلاف دارن, چرا؟
کسی میتونه راهنماییم کنه؟ماشین حساب ویندوز پیش فرض زاویش بر حسب درجه هست. زاویه ی نیم صفحه بر حسب درجه برابر 180 هست ولی بر حسب رادیان 3.1415926535897 ... هست. پس اگه می خوای مثل پیش فرض ماشین حساب ویندوز از درجه استفاده کنی باید زاویه رو از درجه به رادیان تبدیل کنید یعنی ضرب در pi (که 3.14 ... هست) و بعد تقسیم بر 180 کنید. یا در کل میشه گفت ضرب در 0.01745329251994329576923690768489 کنید.

و یه سوال دیگه, برای محاسبه ی لگاریتم در مبنای 2 باید از log2 استفاده کرد اما ویژوال استادیو 2010 این تابع رو نداره!
چیکارش میشه کرد؟ در یک تاپیک دیگه می پرسیدید بهتر بود. میشه از تقسیم ln اون عدد بر ln 2 به جواب رسید. پس می تونید یک تابع بنویسید که این کار رو انجام بده و یک نکته اینکه چون ln 2 مقدارش مشخصه (بهتره از ماشین حساب ویندوز کمک بگیرید) درست تر اینه که هر دفعه اون رو حساب نکنیم و به شکل ثابت عدد رو بر اون تقسیم کنیم. یعنی :

#define LOG_2 0.69314718055994530941723212145818
long double Log2(const long double x)
{
return (logl(x) / LOG_2);
};