«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
آموزش و سورس چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی به زبان سی :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

قدیمیا دلم براتون تنگ شده... فقط معرفی کنید توی پیامک یا تماس یاد بیارید.
اگه جواب ندادم شاید موقعیت نداشته باشم.
بگید توی پیام از بچه های پرومیکرز هستید.

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

منبع: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="">
تجدید کد امنیتی