آموزش و سورس چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی به زبان سی
منبع:gameover.blog.ir
چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی
درخواست کننده: arix
برای این کار از فرمول فیثاغوریس میشه استفاده کرد.
ولی من از فرمول مثلثات بهتون یاد می دم.
نکته: sin و cos توابعی هستند که زاویه رو بر حسب رادیان باید درافت کنند.
ما درجه رو بلدیم و میخوایم دایره رو 360 درجه یا یک دور کامل حول مستطیل بچرخونیم.
برای اینکار باید رابطه رادیان و زاویه رو بلد باشیم.
فرمول تبدیل زاویه به رادیان اینه :
رادیان مساوی هست با : (درجه ضربدر عدد پی ) و حاصل تقسیم بر 180
پس اگه زاویه تتا رو توی برنامه دادیم باید ضربدر 180 و سپس تقسیم بر 3.14 کنیم.
ادامه می دیم.
--
این کد باعث ایجاد یک دایره میشه که حول یک مربع میچرخه.
کاری که می کنم اینه که ابتدا فرض میشه یک دایره رسم کردیم.
سپس دایره قبلی رو با باید پاک کنیم تا اثرش نمونه و یک دایره دیگه ایجاد کنیم که یک درجه حول مربع چرخیده.
--
به طور کلی ما هر بار که دایره جدید رو ایجاد می کنیم باید دایره ی قبلی رو مخفی پاک کنیم.
هر بار یکی به 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; }
خروجی: با اجرای برنامه،دایره شروع به چرخیدن حول مستطیل می کنه و همینطور می چرخه تا یک کلید رو بزنیم و تمام.
ممنوم میشم اگرجواب بدید