ورود

View Full Version : شبیه سازی باران در محیط C++ .....



coralisland_17
شنبه 22 اردیبهشت 1386, 23:40 عصر
سلام دوستان :
پروژه درس چند زبانه سازی من در مورد شبیه سازی باران در محیط C++ است.
یعنی باید با استفاده از تابع تصادفی (RANDOM) آن را بنویسیم.
اگر این برنامه کامل باشد میتونم امتحان بدم در غیر این صورت درسم حذف میشه....
خواهش میکنم اگر میتونید کمکم کنید چون من با C++زیاد نمیتونم کار کنم...
از همه متشکرم....:افسرده:

kiani.mehdi
جمعه 28 اردیبهشت 1386, 11:41 صبح
درس چند زبانه سازی دیگه چه درسیه؟

saeid5977
جمعه 28 اردیبهشت 1386, 18:11 عصر
تو dos یا windows؟
شبیه سازی تا چه حدی؟ بارش، برخورد قطرات با زمین، وجود باد یا عدم وجود باد، اصلا دو بعدی یا سه بعدی؟!

coralisland_17
شنبه 29 اردیبهشت 1386, 00:59 صبح
سلام
منظورماز بارش باران :
یعنی وقتی اجراگرفتیم از بالای صفحه باران شروع به باریدن کند .....اگر بادهم بوزد دیگه عالیه(یعنی خط های باران کمی کج باشد که مثلا باد می زند....)
ممنونم:اشتباه:

azmoodeh
شنبه 29 اردیبهشت 1386, 02:24 صبح
دوست عزیز
با وجود اینکه نمی دونم درس چندربانه سازی چی هست !!!!!! ولی حدس می زنم باید چه چیزی رو پیاده کنی
اول از همه بگو که باید با مفاهیم شی گرا (مفهوم و نگرش به موضوع) خوب آشنا بشی تا بتونی مسالت رو به صورت شی گرا مدلسازی کنی.حالا بعد با هر زبونی (C++ یا جاوا باشه خیلی آکادمیک و ایده آله) مساله رو پیاده سازی کنی .
ولی در جهت کمک به شما ، تا اونجایی که من حدس می زنم باید یک کلاس باران تعریف کنید که بستگی به جزییات می تونه متغیرهای متفاوتی داشته باشه . ساده ترین حالتش اینه که یک مکان برای قطره باران داشته باشه . ولی اگر خیلی می خوای دقیق باشه می تونی پرامترهای دیگه ای مثل حجم هر قطره ، دمای هر قطره ، سرعت و شتاب هر قطره ( چون قطرات باران از ارتفاع های متفاوتی شروع به ریزش می کنند ) و .... رو هم توی مساله دخالت بدی .

حالا باید یک تکه کد بنویسی که به صورت رندوم آبجکت هایی از این کلاس ایجاد کنه که متغیرهایی که در بالا گفتم رو به صورت تصادفی برای هر آبجکت مقدار دهی کنه .
الان وقت ریزش بارونه :چشمک:
شما می تونید چند کار کنید . یا اینکه این آبجت ها رو در یه لیست قرار بدید و توی یک حلقه مدام این آبجکت ها رو روشون کار کنید و مکان و .... سایر مقادیرشون رو تغییر بدید و روی صفحه نمایششون بدید و تا وقتی ارتفاعشون صفر شد و از لیست خارجشون کنید (توی همین مرحله می تونید به بارون هاتون باد هم بزنید :بامزه: )
یه راه دیگه اینه که توی پیاده سازی کلاستون یک تایمر داشته باشید که با ایجاد آبجکت شروع به کار کنه و خودش اتوماتیک مثلا هر 1 ثانیه یکبار ارتفاع رو تغییر بده ( و یا حتی به بارونتون باد بزنه ) و روی صفحه خودشو نمایش بده و نهایتا وقتی ارتفاع صفر شد خودش رو از بین ببره . این راه فنی تر هست .

البته روشهای پیچیده تری هم به ذهنم می رسه که اگر با پردازش موازی و Threading آشنا هستی بگو تا برات توضیح بدم.
امیدوارم تونسته باشم کمک کنم .
موفق باشی

kiani.mehdi
شنبه 29 اردیبهشت 1386, 12:36 عصر
توضیحات را دوست خوبمون azmoode داد ولی من با بحث threading بیشتر موافقم
واسه همین از اساتید اجازه می خوام که یکمی راجع به ترد ها و یا به طور کلی multi threading صحبت کنم

البته صحبت های من کلی هستن و زبان خاصی را شامل نمیشن امیدئارم مفید واقع بشه



درواقع شما در هر برنامه که بخوای چندین عمل را همزمان انجام بدین بایستی از thread ها اسفاده کنید
برای هر عمل یک ترد بسازید و ان ها را در زمان های دلخواه start کنید یا stop و یا هر عمل دیگه ای که در مورد ترد ها میشه انجام داد
در واقع ترد ها شبیه سازی پردازش موازی است و در عمل پردازش موازی وجود نداره البته برای کامپیوتر های تک پردازنده singlr prossesor دلیلش هم اینه که یک cpu یا همون پردازنده در یک لحظه از زمان قادر نیست که 2 تا عمل را با هم انجام بده
پس چرا بهش میگن پردازش موازی؟
به این دلیل که cpu در زمان های بسیار کوتاه که برای ما قابل لمس و محسوس نیست بین برنامه های مختلف (در این جا همون ترد ها ) switch میکنه
و چون این زمان switch کردن خیلی کم است و خیلی سریع اتفاق می افته به نظر میرسه که چند تا عمل داره با هم انجام میشه

مثل مواقعی که شما دارید تو ویندوز هم توی ورد تایپ می کنید ، هم دارید به موسیقی با مدیا پلیر گوش میدید و هم دارید تو سایت برنامه نویس (مثل الان من) پست میدید

البته بحث خیلی وسیعتر از این حرف هاست
اینکه این زمان بندی ها چگونه مدیریت میشه دارای الگوریتم های مختلفی که بحث کردن در مورد اونا از حوصله این بخش خارجه

در حال حاضر زبان های نسل چهارمی مثل سی شارپ و یا زبان های دیگه امکانات پیاده سازی و مدیریت ترد ها را گذاشتن که شما میتونین از اونا خوب استفاده کنین

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

اما در سیستم های multi prossesro که چند تا پردازنده دارند واقعا عمل پردازش موازی صورت میگیره
طبیعی هم هست در هر لحظه هر cpu یک کاری انجام میده و چون چند تا cpu داریم پس چند تا عمل همزمان را در یک لحظه میتونیم با هم اجرا کنیم


پیاده سازی ترد ها در زبان C# خیل راحت و مدیریت آنها هم دست خودته
اگه زبان برنامه نویسی اون مهم نیست و با هر زبانی میتونی بنویسی پیشنهاد می کنم بری سراغ سی شارپ
چون پیاده سازی ترد ها در C++ تحت داس مشکلتره

در مورد نمونه کد هم میتونی به سایت زیر مراجعه کنی



www.codeproject.com (http://www.codeproject.com)

حتما این سایت را تا بحال دیدی

امید وارم توضیحاتی که دادم بتونه کمکت کنه

Best Programmer
شنبه 29 اردیبهشت 1386, 12:43 عصر
دوست عزیز
با وجود اینکه نمی دونم درس چندربانه سازی چی هست !!!!!! ولی حدس می زنم باید چه چیزی رو پیاده کنی
اول از همه بگو که باید با مفاهیم شی گرا (مفهوم و نگرش به موضوع) خوب آشنا بشی تا بتونی مسالت رو به صورت شی گرا مدلسازی کنی.حالا بعد با هر زبونی (C++ یا جاوا باشه خیلی آکادمیک و ایده آله) مساله رو پیاده سازی کنی .
ولی در جهت کمک به شما ، تا اونجایی که من حدس می زنم باید یک کلاس باران تعریف کنید که بستگی به جزییات می تونه متغیرهای متفاوتی داشته باشه . ساده ترین حالتش اینه که یک مکان برای قطره باران داشته باشه . ولی اگر خیلی می خوای دقیق باشه می تونی پرامترهای دیگه ای مثل حجم هر قطره ، دمای هر قطره ، سرعت و شتاب هر قطره ( چون قطرات باران از ارتفاع های متفاوتی شروع به ریزش می کنند ) و .... رو هم توی مساله دخالت بدی .

حالا باید یک تکه کد بنویسی که به صورت رندوم آبجکت هایی از این کلاس ایجاد کنه که متغیرهایی که در بالا گفتم رو به صورت تصادفی برای هر آبجکت مقدار دهی کنه .
الان وقت ریزش بارونه :چشمک:
شما می تونید چند کار کنید . یا اینکه این آبجت ها رو در یه لیست قرار بدید و توی یک حلقه مدام این آبجکت ها رو روشون کار کنید و مکان و .... سایر مقادیرشون رو تغییر بدید و روی صفحه نمایششون بدید و تا وقتی ارتفاعشون صفر شد و از لیست خارجشون کنید (توی همین مرحله می تونید به بارون هاتون باد هم بزنید :بامزه: )
یه راه دیگه اینه که توی پیاده سازی کلاستون یک تایمر داشته باشید که با ایجاد آبجکت شروع به کار کنه و خودش اتوماتیک مثلا هر 1 ثانیه یکبار ارتفاع رو تغییر بده ( و یا حتی به بارونتون باد بزنه ) و روی صفحه خودشو نمایش بده و نهایتا وقتی ارتفاع صفر شد خودش رو از بین ببره . این راه فنی تر هست .

البته روشهای پیچیده تری هم به ذهنم می رسه که اگر با پردازش موازی و Threading آشنا هستی بگو تا برات توضیح بدم.
امیدوارم تونسته باشم کمک کنم .
موفق باشی

مگر دارید یک Simulator طراحی می کنید که دمای قطره سایز قطره ( همین سایز قطره یک فرمول سیالاتی داره) جهت بارش و ... رو توش ملاک قرار بدید :متعجب:
نمونه کار اینجا (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=29466&lngWId=1)
البته من این کد را سالها قبل دیده بودم و نمی دونم آیا برای VC هم انجام دادند یا نه ولی اگر پیدا نکردید می تونید از رو همین کار را انجام دهید و ایده کار را داشته باشید.

azmoodeh
شنبه 29 اردیبهشت 1386, 22:23 عصر
دوست عزیز ، به نظر من برنامه نویسی یعنیSimulation یک مساله . حالا هر چی این شبیه سازی کامل تر باسه میگن چه برنامه خوبی نوشته !:چشمک: !!!!!!!!!
ضمنا هدف من از این توضیحات این بود که این دوستمون نسبت به موضوع دید عمیقی پیدا کنند

Best Programmer
یک شنبه 30 اردیبهشت 1386, 05:04 صبح
ببخشید دوست عزیز فکر می کنم اینقدر که در رشته تحصیلی من Simulator و نرم افزار های مهندسی متنوعی در زمینه های گوناگون وجود داره که در هیچ رشته دیگری اینطور باشه.
شما مسئله را بسیار بزرگتر از آن چیزی که هست کردید در حالی که حتی نمی دانید مثلا ویسکوزیته سیال چه تاثیری در سایز قطره داره و چند مورد دیگه چون فرمولشو یادم نیست الان بیان نمی کنم.
این مسئله می تواند از یک پروژه دکتری پیچیده تا یک برنامه بسیار ساده که من نمونه اش را گذاشته ام متغیر باشه.

azmoodeh
یک شنبه 30 اردیبهشت 1386, 18:52 عصر
دوست عزیز Best Programmer
من هم امیدوارم که شما آن قدر شخص باسوادی باشید که در پستتان از آن صحبت می فرمایید . ولی جالب است بدانید که بنده هم راجع به همان ویسکوزیته ای که حضرتعالی می فرمایید اطلاع دارم و مدت زیادی هم روی مدلینگ یک پروژه سد سازی کار کرده ام که ان شالله امیدوارم تجربه ام باعث گردد حضرتعالی ما را هم قاطی آدم حساب بفرمایید. مدتها هم جوانان جویای نامی مثل شما را تدریس کردیم که هزار ماشالله کلی انسان عارف و تحصیلکرده(و البته فهمیده ) هم توی آن بوده اند . از قضا کمی هم کنترل خوانده ایم که حضرتعالی تصدیق می فرمایید که با مدلینگ رابطه تنگاتنگی دارد. فلذا من باب یادآوری دوستانه عرض می نمایم که هدف من از بیان مطالب تغییر زاویه دید یک نفر نسبت به مدلسازی بارش باران بود نه اینکه شیوه پیاده سازی ویسکوزیته مورد انتقاد شما !! مطمئنا جنابعالی به عنوان یک برنامه نویس عاقل و بالغ استحضار کافی دارید که چنانچه پیاده سازی یک برنامه ( که با توجه به رزومه فوق من یک برنامه را یک مدل کنترلی می دانم:افسرده: ) بر اساس نزدیک ترین مدل منطبق با حالات واقعی (حالا جزییات را می شود اضافه کرد) باشد برنامه نویس عادت می کند که همیشه درست فکر کند و از طرفی هم از اعمال تغییر در برنامه اش ترسی نداشته باشد (و از طرفی هم کمی متین باشد ) حالا این ها که گفتیم همه تجربه ای بود که بلکه جوانترها یاد بگیرند :چشمک: :چشمک:
برای شما هم آرزوی موفقیت دارم

kiani.mehdi
یک شنبه 30 اردیبهشت 1386, 22:16 عصر
دوست عزیز BEST PROGRAMMER من نمی دونم شما کی هستین و چقدر برنامه نویسی کار کردین والبته اینکه استاد ما هستین
همچنین دوست خوبم azmoode را هم نمیشناسم
ولی باید بگم من هم با Azmoode موافقم
فکر کنم هر کسی که یه مقداری برنامه نویسی کار کرده باشه منظور aZMOODE را از SIMULATION می فهمه
تعجب می کنم شما ماشالا با این همه ادعا (ببخشین که رک حرف می زنم) چطور منظور aZMOODE را نفهمیدین
بزارین یه مثال ساده بزنم
حتما کلمه OOP بگوشتون خورده اگه نخورده باید بگم مخفف (object oriented programming) می باشد
و این یعنی برنامه نویسی شی گرا
شاید سا ده ترین تعریفی که میشه برای شی گرایی گفت اینه که هر چیزی یک شی است
به همین سادگی
و اشیا دارای یه سری خواص هستند و یه سری هم اعمال که این اعمال بر روی خوص کار انجام میدن
مثلا ماشین را در نظر بگیرین
یه سری خواص مانند رنگ ، در ،تایر و .... داره و اعمالی که داره مثل حرکت به جلو .. عقب .. روشن و خاموش شدن و ......

خوب شما اگر بخواین توی یه برنا مه ماشین را پیاده سازی کنین بهترین حالت اینه که یک کلاس به نام ماشین و خواص و متد های ان در نظر بگیرین و این یعنی شبیه سازی ماشین در برنامه
و منظور AZmoode هم فکر می کنم همین بود
حالا در برنامه دوستمون ماشین نیست بجاش قطره های بارونه
هر قطره بارون میتونه یک شی باشه و پیاده سازی بشه در برنامه نویسی

در پایان در یک جمله بگم شبیه سازی که دوست خوبم azmoode گفتن ، یعنی دید شی گرا پیدا کردن نسبت به همه چیز (همه چیز را مثل شی دیدن) و پیاده سازی اون اشیا

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

حتما این جمله را شنیدین که

بارها شکست خوردم تا راه شکست دادن را آموختم
موفق باشین

Best Programmer
یک شنبه 30 اردیبهشت 1386, 23:30 عصر
دوست عزیز BEST PROGRAMMER من نمی دونم شما کی هستین و چقدر برنامه نویسی کار کردین والبته اینکه استاد ما هستین
همچنین دوست خوبم azmoode را هم نمیشناسم
ولی باید بگم من هم با Azmoode موافقم
فکر کنم هر کسی که یه مقداری برنامه نویسی کار کرده باشه منظور aZMOODE را از SIMULATION می فهمه
تعجب می کنم شما ماشالا با این همه ادعا (ببخشین که رک حرف می زنم) چطور منظور aZMOODE را نفهمیدین
بزارین یه مثال ساده بزنم
حتما کلمه OOP بگوشتون خورده اگه نخورده باید بگم مخفف (object oriented programming) می باشد
و این یعنی برنامه نویسی شی گرا
شاید سا ده ترین تعریفی که میشه برای شی گرایی گفت اینه که هر چیزی یک شی است
به همین سادگی
و اشیا دارای یه سری خواص هستند و یه سری هم اعمال که این اعمال بر روی خوص کار انجام میدن
مثلا ماشین را در نظر بگیرین
یه سری خواص مانند رنگ ، در ،تایر و .... داره و اعمالی که داره مثل حرکت به جلو .. عقب .. روشن و خاموش شدن و ......

خوب شما اگر بخواین توی یه برنا مه ماشین را پیاده سازی کنین بهترین حالت اینه که یک کلاس به نام ماشین و خواص و متد های ان در نظر بگیرین و این یعنی شبیه سازی ماشین در برنامه
و منظور AZmoode هم فکر می کنم همین بود
حالا در برنامه دوستمون ماشین نیست بجاش قطره های بارونه
هر قطره بارون میتونه یک شی باشه و پیاده سازی بشه در برنامه نویسی

در پایان در یک جمله بگم شبیه سازی که دوست خوبم azmoode گفتن ، یعنی دید شی گرا پیدا کردن نسبت به همه چیز (همه چیز را مثل شی دیدن) و پیاده سازی اون اشیا

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

حتما این جمله را شنیدین که

بارها شکست خوردم تا راه شکست دادن را آموختم
موفق باشین

:تشویق:
آقا شما استادید ما که ادعایی نداریم فقط گفتم ممکن تعریف شما از یک پروژه دکتری تا یک برنامه ساده متغیر باشه. شما خودتان علاقه به کل کل و این حرف ها دارید البته قصد جسارت به کسی هم ندارم و اصلا هم سعی نکردم چیزی به رخ کسی بکشم من فقط به این عنوان که در حال تحصیل در 2 رشته هستم و کمی بیشتر با این نرم افزار های مهندسی و شبیه سازی های مهندسی کار کردم نظر دادم حالا شما می خواهید 10 تا فرمول سیالاتی تو شبیه سازی تون استفاده کنید و نیروهای هوا و ترمودینامیکی و اینا رو تو شبیه سازی تون اعمال کنید دیگه نظر خودتون ولی فکر نمی کنم یک استاد از دانشجوش اینو بخواهد تا شما بیایید این توضیحات را بیان نمایید. البته می دانم که شما هدفتان اشتراک فکر و تجربه گران قدرتان بوده که در اینجا جای تشکر دارد. شایدم مشکل از تعریف و دیدگاه من از Simulation باشه که دلیلشم این بوده که زیاد دارم با این گونه نرم افزار ها در روز استفاده می کنم(به دلایل کاری)، شاید دیدگاه یک مهندس کامپیوتر از شبیه سازی چیزهایی در حد تعاریف OOP باشه.
ما که اصلا برنامه نویس نیستیم تا بخواهیم ادعایی تو این بحثا داشته باشیم.
تو پرانتز می گم البته می گم چرا که به شدت اذیت کننده هست
(نمی دانم چرا اکثر بحثا سر یک تعریف ساده یا دیدگاه متفاوت به لجبازی و این قبیل سیستم ها می انجامد که نه سودی برای کسی داشته نه بهره علمی، نه من از این فروم پولی عایدم می شود نه دیگران پس دوستان کمی ساده تر به موضوعات نگاه کنند و بدانند که هیچ کسی اینجا نیامده که مثلا مدیر مایکروسافت بشه، همه ماها از یک جماعتیم و زیر یک چتریم و اکثرا تو ایران هستیم)
در انتهام به سوال مطرح شده ارجاع می دهم.


سلام
منظورماز بارش باران :
یعنی وقتی اجراگرفتیم از بالای صفحه باران شروع به باریدن کند .....اگر بادهم بوزد دیگه عالیه(یعنی خط های باران کمی کج باشد که مثلا باد می زند....)

coralisland_17
دوشنبه 31 اردیبهشت 1386, 00:50 صبح
سلام دوستان
ازهمتون ممنونم برای راهنمایی هاتون ...
ولی من که آخر متوجه نشدم کدام راه را انتخاب کنم تا راحتتر به نتیجه برسم....فقط کمی گیج شدم..........(بازم شرمنده از اینکه راحت حرف زدم...)
فقط خواهشنا وقتی خودتون به نتیجه رسیدین به من هم بگید....فقط توجه داشته باشید که یک برنامه ساده در C++ را میخوام...........
بازم ممنونم

saeid5977
دوشنبه 31 اردیبهشت 1386, 04:11 صبح
آخرشم نگفتی تو کجا میخوای dos یا windows یا ....؟؟؟

Best Programmer
دوشنبه 31 اردیبهشت 1386, 12:36 عصر
سلام دوستان
ازهمتون ممنونم برای راهنمایی هاتون ...
ولی من که آخر متوجه نشدم کدام راه را انتخاب کنم تا راحتتر به نتیجه برسم....فقط کمی گیج شدم..........(بازم شرمنده از اینکه راحت حرف زدم...)
فقط خواهشنا وقتی خودتون به نتیجه رسیدین به من هم بگید....فقط توجه داشته باشید که یک برنامه ساده در C++ را میخوام...........
بازم ممنونم
از اینکه بحث های زائد زیادی پیش آمد متاسفم. هدف از این بحث ها اشتراک دیدگاه هست.
با اونکه شما نگفتید که تحت چه سیستم عاملی می خواهید ولی پیش فرض من ویندوز هست.
در پست http://www.barnamenevis.org/forum/showpost.php?p=341751&postcount=7 نمونه کاری با VB6 قرار داده ام. اگر منظور شما همان بود که هیچ اگر نه و می خواهید خط هایی در دستکتاپتان به عنوان قطره باران قرار دهید باید از ایده های برنامه مثال زده شده استفاده کنید و کمی از توابع گرافیکی ویندوز مانند BitBlt استفاده نمایید تا خطوطی به صورت Random ایجاد نمایید.
نیازی به چند Threadهم نیست چرا که اصلا قرار نیست چند کار هم زمان انجام شود که نیازی به این کار باشد و فکر نکنم نیازی به تعریف خصوصیات خاصی درباره شئی قطره داشته باشید چرا که اصلا کار شما نیازی به تعاریف شئی نداشته و مانند یک Screen ِSaverمعمولی می باشد.

coralisland_17
دوشنبه 31 اردیبهشت 1386, 13:57 عصر
سلام دوستان
منظور من برنامه ای است که در c++نوشته شود و وقتی اجرا گرفتیم در خروجی باران ببارد (یعنی تحت dos)
بازم از همتون ممنونم