آموزش استفاده از توابع سينوسي

Avang2005

مدیر انجمن
سلام دوست من

خوب ما هم يكمي بيكاري ديدم گفتيم يه آموزش كوچولو براي دوستان بزاريم :cool:

ما براي استفاده در كارهاي خيلي پيچيده و حرفه اي بايد رياضي و توابع استفاده كنيم من در اين تاپيك آموزش استفاده

از توابع سينوسي رو ميزارم تا دوستان استفاده كنند.

به فرمول زير توجه كنيد :

PHP:
radians = degrees * Math.PI/180

degrees : عدد بر حسب درجه

Math.PI : همون عدد P يا همون 3.14

خوب من با يك مثال كوچيك شروع مي كنم :

فرض كنيد ما مي خواهيم سينوس 30 درجه رو بدست بياريم !

براي اينكار اول ما بايد درجه رو به راديان تبديل كنيم براي اينكار از فرمول بالا استفاده مي كنيم

PHP:
radians =  30 * Math.PI/180

و حاصل بدست آمده را در يك متغيير قرار ميدهيم در اينجا متغيير ما radians هست

خوب عددي كه بدست مياد بر حسب راديان هست

حالا كافيه كه عددي كه در متغيير radians قرار داره رو وارد توابع كنيم براي اينكار از كد :


PHP:
avang.text = Math.sin(radians )

استفاده مي كنيم خوب در اينجا ما مقداري كه توسط توابع حساب ميشه در يك تكست نمايش ميديم

همونجوري كه مي دونيد Sin(30) مي شود 0.5 اگه تمام مراحل را بدرستي رفته باشيد در تكست عدد 0.5 نمايش

داده مي شود .

توجه : ما در سينوس عدد منفي نداريم پس اگه شما عدد رو مستقيم دارد توابع كنيد به عدد منفي برخورد مي كنيد

اميدوارم مفيد بوده باشه :rose:

موفق باشيد

اينم يه نمونه :
 

پیوست ها

  • sin.zip
    44.4 کیلوبایت · بازدیدها: 137
آخرین ویرایش:

Avang2005

مدیر انجمن
سلام دوست من

چرا اين فرمول تبديل درجه به راديانه و براش از 180 استفاده ميشه

ولي براي تبديل راديان به درجه بايد تقسيم بر 360 درجه بشه

موفق باشيد
 

arman_p

Member
با سلام من همونی هستم که این سوال را از شما پرسیدم.
همان طور که اگرx+y = 90 باشد پس sinx=cosy اما چرا cos60 را 0.5 بدست نم آوریم. یعنی0.49999999 بدست می آوریم.
با تشکر
 

Avang2005

مدیر انجمن
سلام دوست من

خوب شما در همان مثالي كه براتون زدم بجاي اينكه Sin رو بدست بياري Cos بدست بياريد

يعني كد شما اينجور ميشه :

PHP:
pp.text = Math.cos(p)

موفق باشيد

اينم نمونه :
 

پیوست ها

  • cos.zip
    44.5 کیلوبایت · بازدیدها: 90

arman_p

Member
سلام دوست من

خوب شما در همان مثالي كه براتون زدم بجاي اينكه sin رو بدست بياري cos بدست بياريد

يعني كد شما اينجور ميشه :

PHP:
pp.text = math.cos(p)

موفق باشيد

اينم نمونه :

اینو می دونم. اما همانطور که می دانید اگر دو زاویه متمم باشد حتما سینوس زاویه ی اول با کسینوس زاویه ی دوم برابر است. با این احتساب سینوس زاویه ی 30 درجه باید با کسینوس زاویه 60 درجه برابر باشد.
اما می بینیم اختلاف بسیار کمی دارند.
یعنی به جای اینکه کسینوس زاویه ی 60 درجه مانند سینوس زاویه ی 30 درجه باشد 0.49999 است.
چرا کسینوس زاویه ی 60 درجه این گونه است؟
با تشکر
 

arashtavoosi

Active Member
چون محاسبات برای سرعت بیشتر با دقت محدودی انجام می شن اختلاف 0.00000001 در محاسبات معمولی تاثیر خیلی کمی خواهد داشت.
 

Avang2005

مدیر انجمن
سلام دوست من

همونجوري كه آرش عزيز گفت

چون اطلاعات با سرعت زيادي انجام مي شوند دقت يه مقداري پايين مياد

البته اين مقدار هم زياد تاثير نداره چون خيلي كمه

موفق باشيد
 

++Hadi++

Active Member
آموزش حرکت مووي کليپ در مسير محيط دايره اي با استفاده از توابع مثلثاتی
سلام دوستان خسته نباشين
اولا يه تشکر جانانه بايد از آونگ عزيز داشته باشم چون با اين آموزشي که گذاشتن به من در استفاده از توابع مثلثاتي کمک هاي زيادي کردند و حتما اين آموزش به درد خيلي از دوستانمون خورده.
چرا که بهترين راه براي استفاده از توابع مثلثاتي که ما در رياضيات با اون کار داريم اينه که درجه رو به راديان تبديل کنيم.
من امروز يه آموزش کوچيک در مورد حرکت اشيا به دور يه محور مشترک و در يه مسير دايره اي مي نويسم اميد است که مورد استفاده شما دوستان عزيزم واقع بشه.
خوب چند وقت پيش بايو دريد عزيز يه تايپيک در مورد حرکت پرسپکتيو اشيا گذاشته بودند و در مورد حرکت به دور يه مسير دايره اي يا لوزي بود و بعدا خودشون به صورت حرفه اي يه گالري 3 بعدي نوشتن.
خوب من مي خوام امروز يه چيزي در مورد حرکت پرسپکتيو وار به دور يه محور بنويسم . البته در مورد این حرکت می شه از کامپوننتای زیادی استفاده کرد و اگه خواستیم دستی این کارو انجام بدیم باید در مورد تغییرات آلفا و اندازه اشیا هم فکری بکنیم.
خوب بحثو شروع مي کنيم:
فرض کنيد چند تا مووي کليپ در صحنه داريم و مي خواهيم اينا رو در يه مسير محيط دايره اي دور يه نقطه بچرخونيم. اسم نمونه ایشون هم هست s1,s2,s3,s4
اولين راه ساده اي که به نظر مي رسه اينه که اونا رو دور اون نقطه بچينيم و نقطه ثقل اونا رو با استفاده از ابزار free transform عوض کنيم و نقطه ثقل همه اونا رو روي نقطه مرکزي این اشیای چیده شده قرار بديم.
بعد در نوار زماني مثلا در فريم آخر ، يه دور اونا رو دور اين نقطه بچر خونيم ، اين کار نتيجه زير رو مي ده:
1.jpg

اين هميشه مورد خواست ما نيست.چون يه وقتهايي مي خواهيم اشيا بدون اينکه زاويه و جهتشون عوض شه فقط دور نقطه مرکزي بچرخن يعني به اين صورت :
2.jpg

و اينجاست که توابع مثلثاتي به درد ما مي خورن.
فقط کافيه به هر مووي زاويه مورد خواست خودمونو بديم و با دستورات زير سرعت و جهت حرکت و شعاع دايره اي رو که اشيا در مسير محيط اون مي چرخن رو تعيين مي کنيم.
براي اينکه اين اشيا در مسير دايره اي بچرخن از يه تابع enter_frame استفاده مي کنيم و در هر فريم موقعيت دايره ها عوض مي شن.
PHP:
var angle1:Number=0;        //Sin 0 , Cos 1
var angle2:Number=90;      //Sin 1 , Cos0
var angle3:Number=180;      //Sin 0 , Cos -1
var angle4:Number=270;     //Sin -1 , Cos 0
angle1=angle1*Math.PI/180;   //Main Angle 01 Radian
angle2=angle2*Math.PI/180;   //Main Angle 02 Radian
angle3=angle3*Math.PI/180;   //Main Angle 03 Radian
angle4=angle4*Math.PI/180;   //Main Angle 04 Radian
s1.addEventListener(Event.ENTER_FRAME, preloadFunc1);
s2.addEventListener(Event.ENTER_FRAME, preloadFunc2);
s3.addEventListener(Event.ENTER_FRAME, preloadFunc3);
s4.addEventListener(Event.ENTER_FRAME, preloadFunc4);

function preloadFunc1(e:Event):void
{
    angle1 += 0.020; //اين دستور براي ميزان تغييرات اشيا است و با بيشتر کردن مقدار آن مي توان سرعت چرخش را زياد کرد 
                         // اگر به جاي مثبت منفي بنويسيم ، جهت چرخش عوض مي شود
    e.target.x = Math.cos(angle1) * 100;//اين مقدار براي حرکت در مسير محور ايکسهاست 
    e.target.y = Math.sin(angle1) * 100;//اين مقدار براي حرکت در مسير ايگرگ هاست    
}
function preloadFunc1(e:Event):void
{
    angle2 += 0.020; //اين دستور براي ميزان تغييرات اشيا است و با بيشتر کردن مقدار آن مي توان سرعت چرخش را زياد کرد 
                         // اگر به جاي مثبت منفي بنويسيم ، جهت چرخش عوض مي شود
    e.target.x = Math.cos(angle1) * 100;//اين مقدار براي حرکت در مسير محور ايکسهاست 
    e.target.y = Math.sin(angle1) * 100;//اين مقدار براي حرکت در مسير ايگرگ هاست    
}
function preloadFunc1(e:Event):void
{
    angle3 += 0.020; //اين دستور براي ميزان تغييرات اشيا است و با بيشتر کردن مقدار آن مي توان سرعت چرخش را زياد کرد 
                         // اگر به جاي مثبت منفي بنويسيم ، جهت چرخش عوض مي شود
    e.target.x = Math.cos(angle1) * 100;//اين مقدار براي حرکت در مسير محور ايکسهاست 
    e.target.y = Math.sin(angle1) * 100;//اين مقدار براي حرکت در مسير ايگرگ هاست    
}
function preloadFunc1(e:Event):void
{
    angle4 += 0.020; //اين دستور براي ميزان تغييرات اشيا است و با بيشتر کردن مقدار آن مي توان سرعت چرخش را زياد کرد 
                         // اگر به جاي مثبت منفي بنويسيم ، جهت چرخش عوض مي شود
    e.target.x = Math.cos(angle1) * 100;//اين مقدار براي حرکت در مسير محور ايکسهاست 
    e.target.y = Math.sin(angle1) * 100;//اين مقدار براي حرکت در مسير ايگرگ هاست    
}
دقت کنين که در هر لحظه بر مکان ايکس و محور ايگرگ هر شي مکان دهي مي شه و تنها وجه اختلاف این چهار تابع پارامتر زاويه است . وگر نه ما همه اشيا را به يک تابع نسبت مي دادیم.
شايان ذکر است جواب تابع سينوس و کسينوس از منفي يک تا مثبت يک است و با ضرب آن در عددي معين مثل 100 مي توانيم نسبت هاي بدست آورده را بزرگتر کرده ايم .
PHP:
function preloadFunc1(e:Event):void
{
    angle1 += 0.020; //اين دستور براي ميزان تغييرات اشيا است و با بيشتر کردن مقدار آن مي توان سرعت چرخش را زياد کرد 
                         // اگر به جاي مثبت منفي بنويسيم ، جهت چرخش عوض مي شود
    e.target.x = Math.cos(angle1) * 400;//اين مقدار براي حرکت در مسير محور ايکسهاست 
    e.target.y = Math.sin(angle1) * 100;//اين مقدار براي حرکت در مسير ايگرگ هاست    
}


با اين دستور ما مي توانيم مقدار تغييرات ايکس ها را 4 برابر ايگرگ کنيم و در نتيجه لوزي افقي بدست مي آيد که نسبت طول آن به عرض آن 4 برابر است.
3.jpg

فایلهای اتچ رو دانلود کنین
باي...
 

پیوست ها

  • Circle01.rar
    8.9 کیلوبایت · بازدیدها: 62
  • Circle02.rar
    10 کیلوبایت · بازدیدها: 66
  • Lozi.rar
    7.9 کیلوبایت · بازدیدها: 59

Avang2005

مدیر انجمن
سلام دوست من

با تشكر از هادي عزيز بابت اين آموزش خوبشون

فقط اگه لطف كني براي ورژن پايين تر هم بزاريد خيلي خوب ميشه

چون ممكنه خيلي از بچه ها از ورژن 8 استفاده كنند

موفق باشيد
 

++Hadi++

Active Member
سلام آونگ جان
ازتون ممنونم
فقط من شرمندتونم دو تا نکته رو باید عرض کنم :
1- من در پست آموزشیم گفتم لوزی و باید می گفتم بیضی .ببخشین این اکشن اسکریپت مخ آدمو حلیم می کنه دیگه یه همچین باگهایی از ذهنمون بعید نیست.
2- متاسفانه من به فلش های ورژن پایین دسترسی ندارم و با فلش cs4 اونا رو درست کردم.
اگر از دوستانمون کسی بود که به هر دو ورژن فلش cs3 , cs4 دسترسی داشت خواهش می کنم اون 3 تا فایلو تبدیل به cs3 کنه .
حتما صوابشو می برین ...مرسی ازتون ...
بای...
 

arman_p

Member
خوب با این آموزش تقریبا میتون منظومه شمسی رو هم بازسازی کنیم.
درسته؟
 

++Hadi++

Active Member
بله
می شه منظومه شمسی ساخت .
مسیر بیضی وار رو با خط تقارن عمودی به 2 ناحیه از وسط تقسیم می کنین.1 طرف جاییه که گوی (سیاره ) از نزدیک ترین و جلوترین ناحیه به عقب ترین و دورترین ناحیه می ره و طرف دیگه حالتیه که سیاره از دورترین ناحیه(عقب ترین ) به نزدیک ترین ناحیه می یاد.
در اون طرف که سیاره داره دور و دورتر می شه تعداد فریم ها ی پیمودن از نزدیکترین نقطه به دور ترین نقطه رو و یا زمانش رو بدست بیارین .
قطعا زمان رفت از نزدیک ترین به دورترین نقطه مساوی هست با زمان برگشت از دورترین نقطه به نزدیکترین نقطه.
بعد می تونین با کلاس های tween , transition و با دخالت دادن زمان یا تعداد فریم ها ، در اون تیکه که سیاره داره دورتر می شه آلفا ی سیاره و scale اونو کم تر کنین و برعکس در سمت دیگر اگر سیاره از دور به نزدیک اومد آلفا و scale اونو بیشتر کنی.
برای اینم که تشخیص بدی سیاره کجاست می تونی از زاویه یا angle استفاده کنی.
چون angle می تونه از 0 تا 360 باشه .اگر هم بیشتر از 360 باشه دوباره روند 0 تا 360 دور بعد رو بازی می کنه.
راه دیگه کم یا زیاد کردن مناسب scale و آلفا هم خود توابع چرخش اجسام هست و می تونین با گذاشتن شروط مناسب و زاویه مناسب ، کم کم scale و الفا رو کم و زیاد کنین.
بای...
 

جدیدترین ارسال ها

بالا