کانال بازی سازی تلگرام
آموزش و سورس چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی به زبان سی :: آموزش ساخت بازی اندروید+پکیج های تخصصی

آموزش ساخت بازی اندروید+پکیج های تخصصی

هرگز دل من ز علم محروم نشد
کم ماند ز اسرار که معلوم نشد
هفتاد و دو سال فکر کردم شب و روز
معلومم شد که هیچ معلوم نشد
---
تمام اعمالی که انجام می دهیم، حتی اگر ذره ای و مثقالی باشد، به خودمان باز می گردد و بازتابش آنها را در زندگی خواهیم دید. زلزال ۷
او کسی است که (روح) شما را در شب (به هنگام خواب) میگیرد; و از آنچه در روز کرده‏اید، با خبر است; سپس در روز شما را (از خواب) برمیانگیزد; و (این وضع همچنان ادامه مییابد) تا سرآمد معینی فرا رسد; سپس بازگشت شما به سوی اوست; و سپس شما را از آنچه عمل میکردید، با خبر میسازد. انعام ۶۰
دلها به یاد خدا آرام میگیرد. رعد آیه ۲۷
بدانید زندگی دنیا تنها بازی و سرگرمی، و تجمل پرستی و تفاخر در میان شما و افزون طلبی در اموال و فرزندان است . حدید آیه ۲۰
آن خدایی که آدمی را از خون بسته (که تحول نطفه است) بیافرید.
بخوان و (بدان که) پروردگار تو کریم‌ترین کریمان عالم است.
آن خدایی که بشر را علم نوشتن به قلم آموخت.
به آدمی آنچه را که نمی‌دانست تعلیم داد.
راستی که انسان سرکش و مغرور می‌شود.
چون که خود را در غنا و دارایی ببیند. علق ۲- ۷
این زندگانی چند روزه دنیا افسوس و بازیچه‌ای بیش نیست، عنکبوت ۶۴
در روی زمین به تکبر راه مرو که نمی توانی زمین را بشکافی و هرگز قامتت به بلندای کوهها نمی رسد. اسراء ۳۷
در آنچه خداوند بر تو بخشیده است، سرای آخرت را بجوی و سهم خود را از دنیا فراموش مکن و همانگونه که خدا به تو نیکی کرده است نیکی کن و هرگز فساد در زمین منما که خدا مفسدان را دوست ندارد. قصص ۷۷
و هرگاه نعمت و رحمتی به انسان بچشانیم و سپس آن را از او برگیریم او مأیوس و نومید میشود و به کفران و ناسپاسی بر میخیزد. هود ۹
بندگان مرا آگاه ساز که من بسیار آمرزنده و مهربانم. حجر ۴۹
از رحمت خدا نا امید مباشید که جز کافر هیچ کس از رحمت خدا نا امید نیست. یوسف ۸۷
پس به یاد من باشید تا به یاد شما باشم. بقره ۱۵۲
زندگانی دنیا چیزی جز متاع فریبنده نیست . آل عمران ۱۸۵
از آنچه به شما روزی داده ایم پیش از آنکه روزی فرا رسد که نه معامله ای وجود دارد و نه دوستی و شفاعت ، انفاق کنید. بقره ٢۴۵
بسا چیزی را ناخوش داشته باشید که آن به سود شماست و بسا چیزی را دوست داشته باشید که به زیان شماست، و خدا میداند و شما نمیدانید. بقره ۲۱۶
ما آیات (خود) را برای شما بیان کردیم شاید اندیشه کنید...حدید ۱۷

پیوندهای روزانه
پیوندها

منبع:gameover.blog.ir

چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی
درخواست کننده: arix
برای این کار از فرمول فیثاغوریس میشه استفاده کرد.
ولی من از فرمول مثلثات بهتون یاد می دم.
نکته: sin و cos توابعی هستند که زاویه رو بر حسب رادیان باید درافت کنند.
ما درجه رو بلدیم و میخوایم دایره رو 360 درجه یا یک دور کامل حول مستطیل بچرخونیم.
برای اینکار باید رابطه رادیان و زاویه رو بلد باشیم.
فرمول تبدیل زاویه به رادیان اینه :
رادیان مساوی هست با : (درجه ضربدر عدد پی ) و حاصل تقسیم بر 180
پس اگه زاویه تتا رو توی برنامه دادیم باید ضربدر 180 و سپس تقسیم بر 3.14 کنیم.

http://s5.picofile.com/file/8148880550/degree_radian.jpg

ادامه می دیم.
--
این کد باعث ایجاد یک دایره میشه که حول یک مربع میچرخه.
کاری که می کنم اینه که ابتدا فرض میشه یک دایره رسم کردیم.
سپس دایره قبلی رو با باید پاک کنیم تا اثرش نمونه و یک دایره دیگه ایجاد کنیم که یک درجه حول مربع چرخیده.
--
به طور کلی ما هر بار که دایره جدید رو ایجاد می کنیم باید دایره ی قبلی رو مخفی پاک کنیم.
هر بار یکی به teta اضافه می کنیم و دایره جدید رو با رنگ سبز ایجاد می کنیم.
و چون رنگ پس زمینه سیاه هست. دایره ی قبلی رو با رنگ سیاه پاک می کنیم(به وسیله رسم یک دایره سیاه روی دایره سبز قبلی)

علت اینکه از توابع cleardevice و clearviewport استفاده نمی کنم اینه که ما نمی خوایم کل پس زمینه رو پاک کنیم و پردازش اضافه نمی خوام داشته باشه. پس سعی کردم بهترین برنامه و الگوریتم تمیز خودمو که تست هم کردم براتون بنویسم:

#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
//circle Rotate 
//Author : Sajjad3011
//compiler: Turbo C++ windows 7 64bit
int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
   int midx,midy;
   int radius1 = 10;
   int radius2=100;
   float x1,y1,x2,y2,deltaX,deltaY;

   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "c:\\TurboC3\\BGI");

   /* read result of initialization */
   errorcode = graphresult();
   if (errorcode != grOk)  /* an error occurred */
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); /* terminate with an error code */
   }

   clearviewport();
   midx = getmaxx() / 2;
   midy = getmaxy() / 2;

   x1=midx-10;
   y1=midy-10;
   x2=midx+10;
   y2=midy+10;

   rectangle(x1,y1,x2,y2);
   setcolor(getmaxcolor());

   int teta=0;
   while(!kbhit())//while keayboard hit
   {

    //clear or hide old circle using black color
    deltaX=radius2*cos((teta*3.14)/180);
    deltaY=radius2*sin((teta*3.14)/180);
    setcolor(BLACK);
    circle(midx+deltaX,midy+deltaY,radius1);

    //draw new circle
    teta++;
    deltaX=radius2*cos((teta*3.14)/180);
    deltaY=radius2*sin((teta*3.14)/180);
    setcolor(LIGHTGREEN);
    circle(midx+deltaX,midy+deltaY,radius1);

    delay(10);

    if(teta>360)teta=0;
   }
   /* draw the circle */


   /* clean up */
   getch();
   closegraph();
   return 0;
}

خروجی: با اجرای برنامه،دایره شروع به چرخیدن حول مستطیل می کنه و همینطور می چرخه تا یک کلید رو بزنیم و تمام.

http://s5.picofile.com/file/8148880500/circle_rotation_over_rectangle_sajjad3011.jpg



موافقین ۰ مخالفین ۰ ۹۴/۰۳/۲۹
مدیرکل

نظرات (۱)

سلام دمت گرم .میخواستم بدونم اگه بخوایم بجای مربع  وسط پنجره ؛مثلث یالوزی بذاریم ویا بجای دایره مثلث قرار بدیم چکارباید بکنیم ؟
ممنوم میشم اگرجواب بدید
پاسخ:
سلام. ممنون.

وقت حل مسئله رو ندارم اما یکم توضیح میدم:

هیچ فرقی نداره هرچی میخوای بذاری بذار. فقط قبلش یه تابع دیگه بساز که x و y ای که بهش می دیم رو روی مرکز شی ای که می خوای رسم کنی قرار بده. یعنی مثلا اگه مستطیل رسم می کنی نقطه ی اولیه نقطه ی بالا و سمت چپ مسطیل هست  و نقطه ی آخر نقطه ی پایین و سمت راست مستطیل، در حقیقت باید شما یه نقطه رو چرخش بدی و با توجه به اون نقطه به اندازه ی نصف طول مستطیل بیای سمت چپ(x  نقطه رو کم کنی به اندازه ی نصف طول مستطیل)  و به اندازه ی نصف غرض مستطیل بیای بالا(y رو کم کنی به میزان نصف عرض مستطیل)
-
برای مثلث و اشیای دیگه قضیه کمی فرق داره و باید با استفاده از فرمول های هندسی شی مورد نظر رو به مرکزیت نقطه ای که می خوایم رسم کنیم. فرمول های زیای هست که توی اینترنت می تونید با تحقیق بیشتر بهش برسید. به هر حال با فکر کردن و پرس و جوی بیشتر می تونید به حل این مسئله دست پیدا کنید. موفق باشید.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی