تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 5 از 5

نام تاپيک: سوال راجع به برنامه ای در محیط بورلند سی

  1. #1
    آخر فروم باز diana_1989's Avatar
    تاريخ عضويت
    Jan 2007
    پست ها
    1,078

    پيش فرض سوال راجع به برنامه ای در محیط بورلند سی

    سلام دوستان
    من این قطعه کدرو در محیط گرافیکی بورلند سی نوشتم .
    شکل یک طرح از رسم هایی که در دوران راهنمایی تو کتاب ریاضیمون بود.
    حال اگه بخوام به اندازه ی 45 درجه این شکل رو بچرخونم کجای برنامه رو باید تغییر بدم ؟



    int x=320 , y=40;
    for (i=0 ; i<=20 ; i++)
    {
    line (320 , y , x, 240) ;
    line (320 , y , 640-x, 240) ;
    line (320 , 480-y , x, 240) ;
    line (320 , 480-y , 640-x, 240) ;
    x+=10;
    y+=10;
    }

  2. #2
    اگه نباشه جاش خالی می مونه MosaferJade's Avatar
    تاريخ عضويت
    Feb 2011
    محل سكونت
    مگه فرق هم میکنه
    پست ها
    260

    پيش فرض

    سلام
    نسبت به چه نقطه ای می خواید چرخش داده بشه

  3. #3
    آخر فروم باز diana_1989's Avatar
    تاريخ عضويت
    Jan 2007
    پست ها
    1,078

    پيش فرض

    حول همون نقطه اي كه قرار داره . اين برنامه اي كه من نوشتم دقيقا در وسط صفحه رسم ميشه .
    ببينين اين شكل حالت مربع داره اگه 4گوشه اش رو به هم وصل كنيم .
    حالا اگه بخوام شبيه لوزي بشه يعني به اندازه 45 درجه شكل قبلي رو بچخونم چه كدي بايد بنويسم ؟

  4. #4
    اگه نباشه جاش خالی می مونه MosaferJade's Avatar
    تاريخ عضويت
    Feb 2011
    محل سكونت
    مگه فرق هم میکنه
    پست ها
    260

    پيش فرض

    من یه توضیح میدم چکار باید بکنید دیگه خودتون برید روش فکر کنید
    نمیدونم از مثلثات چیزی می دونید یا نه .
    اول اینکه شما برای هر خط کشیدنی به دوتا نقطه لازم دارید (x1,y1) و (x2,y2) شما باید یه تابعی رو طراحی کنید که این دوتا نقطه رو مانند تابع line بگیره و درون اون اول نقاط را یکی یکی جابجا کنید و بعد نقاط جدید به دست آمده را در تابع line قراردهید و در کدی که در بالا نوشتید فقط به جای کلمه line اسم تابعی را که نوشتید قرار بدید تا کارتون حل بشه
    اما اینکه این نقاط جدید را چطوری بدست بیاوریم
    الان شما اگه درست متوجه شده باشم می خواهید نسبت به نقطه (320,240) بچرخه درست
    من یکی از نقاط رو توضیح میدم اونیکی رو هم کپی همین انجام بدید
    نقطه ای که من دارم مثلا فکر کن (a1,b1) هست اگه بین دو نقطه (a1,b1)و(320,240) بکشیم شیب خط میشه
    m=(240-b1)/(320-a1)0 از اینجا میشه زاویه بین این خط و محور x را بدست آورد با تابع arctan که در cوc++ وجود دارد
    z=arctan(m)0 حالا z را با زاویه 45 درجه شما جمع می کنیم (یادتون باشه تو cوc++ زاویه ها برحسب رادیان هست)
    z جدید به این صورت استفاده می کنید m=tan(z)0 حالا m شیب خط جدید هست که از نقطه (320,240) می گذرد حالا
    برمی گردیم روی نقطه اول و فاصله بین (320,240)و (a1,b1) را می گیریم r=sqrt((320-a1)^2+(240-b1)^2)0
    معادله خط جدید میشه y-240=m(x-320)0 حالا روی این خط نقاطی راپیدا کنید که به فاصله r از نقطه(320,240) باشد
    که اتفاقا دوتا نقطه بدست می آید که شما باید بفهمید که کدومش نقطه موردنظر شماست این دوتا نقطه هم با حل دو معادله و دو مجهول زیر بدست می آید
    y-240=m(x-320)0
    r^2=(x-320)^2+(y-240)^2
    که اگه اینو بدست بیارید دو تا نقطه بدست میاد که یکیش نقطه مورد نظر شماست
    وقت نداشتم روش خوب فکر کنم اگه وقت کردم حتما براتون کامل می نویسم
    فکر کنم تو c یه تابع بود واسه چرخش تصاویر اسمش یادم نمیاد
    نزدیک به چها سال پیش که باهاش کار می کردم اگه اونم پیدا کردم واست همینجا میزارم
    موفق باشید

  5. #5
    داره خودمونی میشه z3inab's Avatar
    تاريخ عضويت
    Feb 2011
    محل سكونت
    لندن
    پست ها
    52

    پيش فرض

    راهی که محبوبه گفته است راه درستی است. ولی راه بهتر در برنامه نویسی استفاده از ماتریس ها هست. این روشی است که در تمام برنامه های گرفیکی یا شبیه سازی فیزیک به کار می رود. ماتریس ها برنامه را خیلی ساده تر می کنند و کد کوتاه تری هم خواهید داشت.
    اگر از هندسه دبیرستان یادتان باشد برای تمام تبدیل های هندسی یک ماتریس وجود دارد. این جا شما به ماتریس چرخش دو بعدی نیاز دارید.
    عبارت انگلیسی آن Rotation Matrix هست اگر می خواهید سرچ کنید. برای دو بعدی:

    θ زاویه است که می خواهید چرخش به آن اندازه شود. همانطور که محبوبه گفت باید برای خط ها نقاط ابتدایی و انتهایی را نگهداری کنی. باید از بردار یرای این کار استفاده کنی در این حالت. مثلا اگر نقطه ای داری در x=10, y= 5 آنرا با بردار
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    T نشان می دهد که من ترنسپوز Transpose (ببخشید یادم نیست فارسیش چی می شود) آن را نوشته ام. چون در حالت معمولی بردار ها یک ماتریس ۲ در ۱ هستند (عمودی). حالا برای محاسبه x , y جدید کافیست که بردار را در ماتریس ضرب کنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همانطور که می دانی R یک ماتریس ۲ در ۲ است و بردار یک ماتریس ۲ در ۱ است. پس حاصل ضرب یک بردار ۲ در ۱ است که مختصات جدید نقزه بعد از چرخش است. اگر همه نقطه ها را در یک آرایه از بردار ها نگهدار کنی کافیست برای چرخش ماتریس R را در همه بردار های داخل آرایه ضرب کنی تا جای جدید نقاط را بگیری. هم می توانی این را خودت بنویسی چون ساده است. اما اگر برنامه ای بنویسی که خیلی با ماتریس ها و بردار ها سر و کار دارد تعداد زیادی کتابخانه برای این کار نوشته شده است. مثلا
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    را ببینید.

    پی نوشت: اگر مرکز چرخش را می خواهید نقطه ای غیر از مرکز مختصات باشد باید یک جابجایی برای همه نقطه ها٫ نقطه مرکز چرخش را به مرکز منقل کنید و چرخش را انجام دهید و بعد همه نقاط را دوباره جابجا (translate) کنید.
    پی نوشت ۲: این چیزی که نوشتم برای حالیت کلی است. چون نقاط در برنامه تو توسط معادله تولید می شوند می توانی مستقیم برای معدله چرخش را انجام بدهی. من برای یک چهارم اول (راست بالا) این را توضیح می دهم شما حتما می توانی برای سه قسمت دیگر انجام دهید. با فرض اینکه چرخش در جهت عقربه های ساعت مورد نظر است. اول اینکه چون فاصله ابتدا ( و انتهای) خط ها در هر تکرار ۱۰ تا در محور x , y افزایش دارد. اگر ۱۰ واحد را ۴۵ درجه بچرخانی می شود تقریبا 7.071 در هر دو محور یعنی:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مرکز گرافیک تو در ۳۲۰ و ۲۴۰ است. پس نقطه شروع خط اول که ۳۲۰ و ۴۰ است (بعد از جابجایی ۳۲۰ و ۲۴۰ به مرکز) می شود ۰ و ۲۰۰. حالا ان نقطه را با ماتریس چرخش ۴۵ درجه چرخش می شود 141.421- , 141.421 و بعد از برگرداندن مرکز به ۳۲۰ و ۲۴۰ مختصات جدید می شود: 461.42 و 98.57.
    و چون انتهای خط از مرکز چرخش شروع می شود همانجا می ماند.

    پس برنامه برای یک چهارم اول شکل اینطوری تغییر می کند:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خروجی برنامه این است:



    برای کد بهتر باید float ها را روند کرد به جای قطع کردن. شاید برای بورلندباید کمی تغییر دهید اگر error بدهد.
    Last edited by z3inab; 06-03-2011 at 20:45.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •