# Native Code > برنامه نویسی در 6 VB > برنامه نویسی مرتبط با بازی و گرافیک در VB6 >  تابع سینوس و کسینوس ...

## M E H D I

با سلام ....

می خواستم بدونم چرا VB جواب درست سینوس و کسینوس نود درجه رو نمی ده  ؟
مگه سینوس نود درجه نمی شه یک و کسینوسش هم صفر ؟ پس چرا این داره این مدلی می ده ؟

در ضمن اگه فرق سینوس و کسینوس رو  با تانژانت و کتانژانت بگین ممنون می شم . دو تا شون هم  برا ی مختصات دهی که استفاده می شن ...


ممنون ...

----------


## xxxxx_xxxxx

مقداری که به توابع مثلثاتی میدید بر اساس رادیان است و نه درجه.
مثلاً معادل 90 درجه به رادیان میشه pi/2 که pi هم همون 3.14 هست. البته pi رو دقیقتر محاسبه کنید تا نتایجتون هم دقیقتر باشه. (منظورم تعداد ارقام اعشار هست)

ترجیحاً بجای استفاده از تصاویر برای نمایش کد از تگ کد () استفاده کنید.

----------


## M E H D I

ممنون ...
اتفاقا" من هم از رادیان استفاده کردم ، همونطور که تو عکس هست تو ی متغیر P مقدار دقیق عدد پی هست و توی متغییر r  زاویه برحسب رادیان .

الان من می خوام یه توپ رو از تو یه منجنیق بفرستم هوا بهش زاویه 90 درجه می دم مستقیم نمی ره هوا ، یعنی قوسی مثل زاویه هشتاد و خورده ایی بر می داره می یاد زمین .

----------


## xxxxx_xxxxx

سلام،
اگر مشکلی وجود داشته باشه معمولاً فقط روی نسبت هایی که نتیجه صفر باید داشته باشند وجود داره.
مثل همین کسینوس 90 درجه.
روی همین 90 درجه چند مثال میزنیم.
ابتدا سعی کنید تا جای ممکن عدد پی رو دقیق محاسبه کنید(هرچند که غیرممکن هست):

Dim pi As Double
pi = 3.14159265358979
خب، سینوس 90 درجه میشه 1 که دستور زیر هم همینو میگه:

MsgBox Sin(pi / 2)    'Sin(90)  Result= 1
حالا کسینوس 90 درجه میشه 0 ، اما دستور زیر یه خروجی دیگه میده!:

MsgBox Cos(pi / 2)    'Cos(90)  Result= 1.61554255216634E-15
این عدد، یک عدد بسیار بسیار نزدیک به صفر است. آن را اینگونه بخوانید: یک ممیز خورده ای :لبخند گشاده!:  ضربدر 10 به توان منفی پانزده. یعنی صفر ممیز، بعد از نقطه اعشار 14 تا صفر وجود داره و بعد مابقی اعشار. پس عدد خیلی خیلی نزدیک به صفر است:

0.00000000000000161554255216634


این مشکل برمیگرده به میزان دقت عدد pi. درواقع محاسبه درست انجام شده و اون عددی که شما می بینید همون کسینوس پی دوم هست. اما ما پی رو فقط تا 14 رقم اعشار درنظر گرفتیم. در صورتی که عدد پی یک عدد اصم هست. یعنی تعداد اعشار آن بینهایت هست.(لااقل تاکنون که اصم نبودن آن ثابت نشده).تصویری که در ضمیمه قرار داره عدد پی رو تا بیش از 4700 رقم اعشار نشون میده! شما میتوانید تا چند میلیون رقم اعشار هم  آن را محسابه کنید اما این مقدار در متغیرها نمی گنجد.

برای رفع این مشکل شما می توانید یک شرط بزارید، که اگر عدد حاصل بسیار کوچک بود آن را 0 درنظر بگیر. پس دستور فوق رو به اینصورت می نویسیم:

Dim C90 As Double
C90 = Cos(pi / 2)
If C90 < 0.000000000000005 Then C90 = 0
MsgBox C90   'Result= 0
موفق باشید/

----------


## program2vb

ابتدا سعی کنید تا جای ممکن عدد پی رو دقیق محاسبه کنید(هرچند که غیرممکن هست):


عزیزم چرا نمیشه ¿¿

اینم روش محاسبش ::

Print Atn(1) * 4

----------


## xxxxx_xxxxx

> عزیزم چرا نمیشه ¿¿
> 
> اینم روش محاسبش ::
> 
> Print Atn(1) * 4


سلام،
منظور من تعداد ارقام اعشار عدد پی بود که در متغیرهای اعشاری جا نمیشه.

----------


## MP.C-Writer

سلام
یه روش ساده برای محاسبه اش است که ماشین حساب خود ویندوز هم از این راه استفاده می کنه.

اون هم استفاده از کد های زیره:
[CODE]Dim p As String, d As Integer, r As Double

p = "3.1415926535897932384626433832795"
d = Text1

r = p * d / 180

 Print= Sin(r)  ]

در این کد مقدار تقریبی پی رو که خود ماشین حساب ویندوز در اختیارمون قرار می ده در یک متغیر رشته ای قرار می دیم تا مشکل اعشار های متغیر دابل از بین بره.
متغیر دی، مقدار درجه است که کاربر وارد می کنه.
متغیر آر هم بر حسب رادیان  است که فرمول حساب می کنه.
و تمام مقادیر درست درمیاد.

دوستان فقط اگر مطلب جالبی گذاشته می شه که به دردتون می خوره، بی زحمت یه تشکر بکنید/.

----------

