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

شروع موضوع توسط Avang2005 ‏7 جولای 2009 در انجمن برنامه فلش Flash

  1. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

    خوب ما هم يكمي بيكاري ديدم گفتيم يه آموزش كوچولو براي دوستان بزاريم :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
    آخرین ویرایش: ‏7 جولای 2009
    نوشته شده توسط Avang2005 در ‏7 جولای 2009
    splinter cell، smmousazadeh، khorzu و 6 نفر دیگر از این ارسال تشکر کرده اند.
  2. BioDread

    BioDread Banned

    ارسال‌ها:
    1,443
    تشکر شده:
    1,223
    امتیاز دستاورد:
    36
    ان 180 مگه درجه ما نیست؟
    پس چرا 360 نزاشتی؟
     
    نوشته شده توسط BioDread در ‏7 جولای 2009
    arman_p از این پست تشکر کرده است.
  3. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

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

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

    موفق باشيد
     
    نوشته شده توسط Avang2005 در ‏7 جولای 2009
    arman_p و BioDread از این پست تشکر کرده اند.
  4. BioDread

    BioDread Banned

    ارسال‌ها:
    1,443
    تشکر شده:
    1,223
    امتیاز دستاورد:
    36
    آهان
     
    نوشته شده توسط BioDread در ‏8 جولای 2009
    arman_p از این پست تشکر کرده است.
  5. arman_p

    arman_p Member

    ارسال‌ها:
    437
    تشکر شده:
    222
    امتیاز دستاورد:
    16
    با سلام من همونی هستم که این سوال را از شما پرسیدم.
    همان طور که اگرx+y = 90 باشد پس sinx=cosy اما چرا cos60 را 0.5 بدست نم آوریم. یعنی0.49999999 بدست می آوریم.
    با تشکر
     
    نوشته شده توسط arman_p در ‏10 جولای 2009
  6. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

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

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

    PHP:

    pp.text = Math.cos(p)
     
    موفق باشيد

    اينم نمونه :
     

    پیوست ها:

    • cos.zip
      اندازه فایل:
      کیلوبایت 44.5
      نمایش ها:
      90
    نوشته شده توسط Avang2005 در ‏10 جولای 2009
    ++Hadi++ و arman_p از این پست تشکر کرده اند.
  7. arman_p

    arman_p Member

    ارسال‌ها:
    437
    تشکر شده:
    222
    امتیاز دستاورد:
    16
    اینو می دونم. اما همانطور که می دانید اگر دو زاویه متمم باشد حتما سینوس زاویه ی اول با کسینوس زاویه ی دوم برابر است. با این احتساب سینوس زاویه ی 30 درجه باید با کسینوس زاویه 60 درجه برابر باشد.
    اما می بینیم اختلاف بسیار کمی دارند.
    یعنی به جای اینکه کسینوس زاویه ی 60 درجه مانند سینوس زاویه ی 30 درجه باشد 0.49999 است.
    چرا کسینوس زاویه ی 60 درجه این گونه است؟
    با تشکر
     
    نوشته شده توسط arman_p در ‏11 جولای 2009
  8. arashtavoosi

    arashtavoosi Member

    ارسال‌ها:
    142
    تشکر شده:
    133
    امتیاز دستاورد:
    16
    چون محاسبات برای سرعت بیشتر با دقت محدودی انجام می شن اختلاف 0.00000001 در محاسبات معمولی تاثیر خیلی کمی خواهد داشت.
     
    نوشته شده توسط arashtavoosi در ‏11 جولای 2009
    arman_p از این پست تشکر کرده است.
  9. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

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

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

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

    موفق باشيد
     
    نوشته شده توسط Avang2005 در ‏11 جولای 2009
    arman_p از این پست تشکر کرده است.
  10. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,802
    امتیاز دستاورد:
    36
    آموزش حرکت مووي کليپ در مسير محيط دايره اي با استفاده از توابع مثلثاتی
    سلام دوستان خسته نباشين
    اولا يه تشکر جانانه بايد از آونگ عزيز داشته باشم چون با اين آموزشي که گذاشتن به من در استفاده از توابع مثلثاتي کمک هاي زيادي کردند و حتما اين آموزش به درد خيلي از دوستانمون خورده.
    چرا که بهترين راه براي استفاده از توابع مثلثاتي که ما در رياضيات با اون کار داريم اينه که درجه رو به راديان تبديل کنيم.
    من امروز يه آموزش کوچيک در مورد حرکت اشيا به دور يه محور مشترک و در يه مسير دايره اي مي نويسم اميد است که مورد استفاده شما دوستان عزيزم واقع بشه.
    خوب چند وقت پيش بايو دريد عزيز يه تايپيک در مورد حرکت پرسپکتيو اشيا گذاشته بودند و در مورد حرکت به دور يه مسير دايره اي يا لوزي بود و بعدا خودشون به صورت حرفه اي يه گالري 3 بعدي نوشتن.
    خوب من مي خوام امروز يه چيزي در مورد حرکت پرسپکتيو وار به دور يه محور بنويسم . البته در مورد این حرکت می شه از کامپوننتای زیادی استفاده کرد و اگه خواستیم دستی این کارو انجام بدیم باید در مورد تغییرات آلفا و اندازه اشیا هم فکری بکنیم.
    خوب بحثو شروع مي کنيم:
    فرض کنيد چند تا مووي کليپ در صحنه داريم و مي خواهيم اينا رو در يه مسير محيط دايره اي دور يه نقطه بچرخونيم. اسم نمونه ایشون هم هست s1,s2,s3,s4
    اولين راه ساده اي که به نظر مي رسه اينه که اونا رو دور اون نقطه بچينيم و نقطه ثقل اونا رو با استفاده از ابزار free transform عوض کنيم و نقطه ثقل همه اونا رو روي نقطه مرکزي این اشیای چیده شده قرار بديم.
    بعد در نوار زماني مثلا در فريم آخر ، يه دور اونا رو دور اين نقطه بچر خونيم ، اين کار نتيجه زير رو مي ده:
    [​IMG]
    اين هميشه مورد خواست ما نيست.چون يه وقتهايي مي خواهيم اشيا بدون اينکه زاويه و جهتشون عوض شه فقط دور نقطه مرکزي بچرخن يعني به اين صورت :
    [​IMG]
    و اينجاست که توابع مثلثاتي به درد ما مي خورن.
    فقط کافيه به هر مووي زاويه مورد خواست خودمونو بديم و با دستورات زير سرعت و جهت حرکت و شعاع دايره اي رو که اشيا در مسير محيط اون مي چرخن رو تعيين مي کنيم.
    براي اينکه اين اشيا در مسير دايره اي بچرخن از يه تابع 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 برابر است.
    [​IMG]
    فایلهای اتچ رو دانلود کنین
    باي...
     

    پیوست ها:

    • Circle01.rar
      اندازه فایل:
      کیلوبایت 8.9
      نمایش ها:
      62
    • Circle02.rar
      اندازه فایل:
      کیلوبایت 10
      نمایش ها:
      66
    • Lozi.rar
      اندازه فایل:
      کیلوبایت 7.9
      نمایش ها:
      59
    نوشته شده توسط ++Hadi++ در ‏13 جولای 2009
    aminislami، splinter cell، armanbm و 5 نفر دیگر از این ارسال تشکر کرده اند.
  11. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

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

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

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

    موفق باشيد
     
    نوشته شده توسط Avang2005 در ‏13 جولای 2009
    arman_p و ++Hadi++ از این پست تشکر کرده اند.
  12. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,802
    امتیاز دستاورد:
    36
    سلام آونگ جان
    ازتون ممنونم
    فقط من شرمندتونم دو تا نکته رو باید عرض کنم :
    1- من در پست آموزشیم گفتم لوزی و باید می گفتم بیضی .ببخشین این اکشن اسکریپت مخ آدمو حلیم می کنه دیگه یه همچین باگهایی از ذهنمون بعید نیست.
    2- متاسفانه من به فلش های ورژن پایین دسترسی ندارم و با فلش cs4 اونا رو درست کردم.
    اگر از دوستانمون کسی بود که به هر دو ورژن فلش cs3 , cs4 دسترسی داشت خواهش می کنم اون 3 تا فایلو تبدیل به cs3 کنه .
    حتما صوابشو می برین ...مرسی ازتون ...
    بای...
     
    نوشته شده توسط ++Hadi++ در ‏14 جولای 2009
    arman_p و Avang2005 از این پست تشکر کرده اند.
  13. arman_p

    arman_p Member

    ارسال‌ها:
    437
    تشکر شده:
    222
    امتیاز دستاورد:
    16
    خوب با این آموزش تقریبا میتون منظومه شمسی رو هم بازسازی کنیم.
    درسته؟
     
    نوشته شده توسط arman_p در ‏27 جولای 2009
    ++Hadi++ از این پست تشکر کرده است.
  14. Avang2005

    Avang2005 مدیر انجمن

    ارسال‌ها:
    3,811
    تشکر شده:
    4,092
    امتیاز دستاورد:
    113
    سلام دوست من

    خواستن توانستن است و بس

    موفق باشيد
     
    نوشته شده توسط Avang2005 در ‏28 جولای 2009
    arman_p و ++Hadi++ از این پست تشکر کرده اند.
  15. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,802
    امتیاز دستاورد:
    36
    بله
    می شه منظومه شمسی ساخت .
    مسیر بیضی وار رو با خط تقارن عمودی به 2 ناحیه از وسط تقسیم می کنین.1 طرف جاییه که گوی (سیاره ) از نزدیک ترین و جلوترین ناحیه به عقب ترین و دورترین ناحیه می ره و طرف دیگه حالتیه که سیاره از دورترین ناحیه(عقب ترین ) به نزدیک ترین ناحیه می یاد.
    در اون طرف که سیاره داره دور و دورتر می شه تعداد فریم ها ی پیمودن از نزدیکترین نقطه به دور ترین نقطه رو و یا زمانش رو بدست بیارین .
    قطعا زمان رفت از نزدیک ترین به دورترین نقطه مساوی هست با زمان برگشت از دورترین نقطه به نزدیکترین نقطه.
    بعد می تونین با کلاس های tween , transition و با دخالت دادن زمان یا تعداد فریم ها ، در اون تیکه که سیاره داره دورتر می شه آلفا ی سیاره و scale اونو کم تر کنین و برعکس در سمت دیگر اگر سیاره از دور به نزدیک اومد آلفا و scale اونو بیشتر کنی.
    برای اینم که تشخیص بدی سیاره کجاست می تونی از زاویه یا angle استفاده کنی.
    چون angle می تونه از 0 تا 360 باشه .اگر هم بیشتر از 360 باشه دوباره روند 0 تا 360 دور بعد رو بازی می کنه.
    راه دیگه کم یا زیاد کردن مناسب scale و آلفا هم خود توابع چرخش اجسام هست و می تونین با گذاشتن شروط مناسب و زاویه مناسب ، کم کم scale و الفا رو کم و زیاد کنین.
    بای...
     
    نوشته شده توسط ++Hadi++ در ‏28 جولای 2009
    arman_p از این پست تشکر کرده است.

به اشتراک بگذارید