بهنامخدا
برنامهنويسیبهزبانC/C++
پروژهیدرسمبانی
شمارهي1
شبيهسازيديناميکذرات
مدرس:
دانشپژوه
مهندس
تنظيمتوسط:مسعودخاري
مسالپاييز9911-19
ني
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
.1مقدمه
شبيهسازيديناميکذرات،نوعيشبيهسازيرايانهاياستکهدرآنحرکتتعدادزياديموجوديتکوچک،کهه
يشود.ايننهو
ماآنهاراذره9ميناميم،برمبناينيرويموجودبينآنهاوبااستفادهازروشهايعدديبررسيم
نحوهيحرکتاتمهاومولکولهااشارهکرد.بهعلهت
توانبهمطالعهي
شبيهسازيکاربردهايزياديداشتهکهمي
کاغذامکانپهذيرنيسهت.در
حرکتآنهابااستفادهازفرمولهايرياضيبرروي
شبيني
وجودتعدادبااليذره،پي
روهاشاملجاذبهيزمينواصهطکا باشهنداايهن
حالتهايسادهتر(زمانيکهيکشيئوجودداشتهباشدوني
مسئلهدربررسيحرکتپرتابههاوياکنترلمسيرحرکتموشککاربردداردکهدرحضوراصطکا تنههاروش
يباشد.
حلآنهااستفادهازروشهايعدديبااستفادهازرايانهم
دراينمسئلهذراتميتواننددرفضاحرکتکنندوبايکديگرتعاملداشتهباشند.بهاينصورتکهدراثرنيروي
دافعه(ياجاذبهامتقابلبرهمديگراثرگذاشتهومسيرحرکتهمديگرراتغييرميدهند.تعيهينمسهيرحرکهت
يشود.
ناشيازُبردارهاينيروتوسط«قوانينحرکتينيوتن»انجامم
يشويد.
حلمعادالتسادهيديفرانسيلآشنام
نپروژهيشبيهسازيشمابايکروشعدديبراي
درطياي
پروژهيدرس
.2تعريف
صفحهيدوبعديx-yوجوددارند.هريکازاينذراتمطهاب رابطههي
فرضکنيدکهمجموعهايازذراتدريک
يکنند:
زيربههمديگرنيرويدافعهواردم
⃗⃗⃗
(1ا
همهيذراتيکساناست.مقدارصورتکسرراثابتوبهصورتفرضيبرابربها
مقدار هابراي
فاصلهيدوذرهازهماست.راستايايننيرودرامتدادخهطواصهلدوذرهوجههتآنبهه
درنظربگيريد .نيز
سمتمخالفيکديگراست.
شکل1
نذراتدرصفحهيدوبعديبهصورتماتريسي،درnسطروnستوندرکناريکديگرقرارگرفتهاند(شکل2ا.
اي
ههمهيآنهاصفراسهت.فهرضکنيهدکهه
درزمانصفر،مکاناوليهاينذراتثابتومشخصبودهوسرعتاولي
ذرهيسطرiوستونjرابا
9
.
يدهيمکه
نمايشم
Particle
صفحه1
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
شکل2
کذرهيجديدکهآنرابا نشانميدهيم،باسرعتاوليهمشخصبهطهر ايهنمجموعههذراتارسهال
حالي
يشود.
م
شکل9
رابطهي(1انيرويدافعهواردميکنند.دراثربراينهد
نهمهيذراتقبليبههمديگرمطاب
ذرهيجديدوهمچني
ايننيروها،هرکدامازذراتطب رابطهي
( 2ا
دارايشتابشدهودراثرآنبهحرکتدرميآيند .جرمذراتبودهکهبرايهمههيذراتيکسهاناسهتو
مقدارشتاب2ذراتاست.
توجهکنيدکهFوaبردارهايدوبعديدرصفحهx-yهستند.
2
acceleration
صفحه2
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
9
نذرهيجديدرادرطييکدورهزمانيخها
دراينپروژهشمابايدباشبيهسازياينذرات«مسيرحرکت» اي
يشود.
دربازههايزمانيکوچک انجامم
لهيتکرار4
بهدستآوريد.شبيهسازيبهوسي
يکنيد.مقهدار
همهينيروهابرهرذرهرامطاب رابطهي(1احسابم
بهاينصورتکهابتدابرايلحظه،t = 0برايند
ازرابطهيزيربهدسهت
دوذرهيPو'P
مثالفاصلهي
ابرابربافاصلهيهندسيدوذرهاست.براي
دررابطهي(1
r
يآيد:
م
√
(9ا
توجهنماييدکهبايدمقدارهرنيرووبرايندنيروهارابهطريقيبهصورتبُهرداربههدسهتآوريهد.بهرايبهه
هردوذرهيPو'Pاستفادهکنيد.
دستآوردناينبرداربايدازمکانهندسي
يآيد:
اشتابهرذرهدرلحظهيصفر( ابهدستم
سپسطب رابطهي(2
بعدباتقريبزدنمعادلهديفرانسيلسرعت5برحسبشتاب(
⃗⃗⃗⃗
ا،تغييهرسهرعتتقريبهيههرذرهرا
يکنيد:
محاسبهم
⃗⃗⃗⃗⃗
(4ا
⃗⃗⃗⃗⃗
⃗⃗⃗
⃗⃗⃗⃗⃗
⃗⃗⃗
کهدرنتيجهسرعتجديدبهدستميآيد،وبااسهتفادهازمعادلههيديفرانسهيلمکهان6بهرحسهبسهرعت
يآيد:
ا،تغييرمکانودرنتيجهمکانتقريبيجديدذرهبهدستم
(
⃗⃗⃗
( 5ا
⃗⃗⃗⃗
⃗⃗⃗⃗
⃗⃗⃗⃗
⃗⃗⃗⃗
لحظهيجديد
بهاينترتيبسرعتومکانجديدهرذره( و ابراي
بهدسهتمهيآيهد.
هاوسرعتهايجديد،بهه
باتکرارمراحلفوقوبااستفادهازمکان
رابهاندازهي افزايشدادهو
سپسمقدار
ترتيبنيرو،شتاب،سرعتومکانهرذرهمجدداًبرايزمانبعهدي
همينطوراليآخر.
9
4
iteration
5
6
Trajectory
Velocity
Location
صفحه9
محاسهبهمهيشهود.و
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
.9مراحلپروژه
پروژهيشبيهسازيراپيادهکنيد.المانهايموردنظربرنامهدربرنامهمهدلسهازيشهدهوپارامترهها
.1درابتدا
يشوند.
يشود.ومقاديرموردنظرپروژهدرحيناجرايبرنامهچاپم
يشوند.شبيهسازياجرام
تعريفم
رهيخروجيهايموردنظردريکفايلمتنيوبافرمتمشخصرابهه
.2خروجيبهفايل:سپسبايدقابليتذخي
برنامهاضافهکنيد.
.4تعريفپارامترهايمسئله
مکانذرهي
فرضکنيد
،سهرعتآنرابها
درلحظهيtرابا
،وشهتابآنرابهانشهان
درصفحهيدوبعديهستند.
يدهيم،کههمگيبردارهايي
م
يشود.
ازرابطهيزيرتعيينم
درحالتاوليه،مکاناوليهيذراتموجوددرصفحه
(6ا
] [
[
]
ههمهيذراتموجودصفراست.
يشودکهسرعتاولي
همچنينيادآوريم
(7ا
]
[
[
]
يشودکهمکانوسرعتاوليهياينذرهمطاب زيراست:
سپسذرهيجديد بهسمتمجموعهپرتابم
( 8ا
شبيهسازيدربازههايزماني
]
[
[
]
،حرکتذراتراشهبيهسهازي
انجامميشودوبايدتازمان
کنيد.
مقدارجرمرابرابربا1.0
درنظربگيريد.همچنين
و
.
ادهسازي
.5مراحلپي
برايانجاماينپروژهپيشنهادميشودازيکstructياclassبرايتعريهفبردارههايشهتاب،سهرعت،ومکهان
يتواندبهصورتدلخواهزيرباشد:
استفادهکنيد.يکstructنوعيم
struct Vector
{
;double x
;double y
}
صفحه4
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
مسالپاييز1911-11
ني
ذراتموجودوذرهيجديدرا(باروشدلخواهخوداتعريفکنيد.هرذرهدارايسهمقدارمکان،
سپسمجموعهي
سرعت،وشتاباستکههمگيازنو Vectorهستند.
همهذراترامطاب روابط(6االي(8امشخصکنيد.
درابتدابايدمقاديراوليهي
رابطهي(1انيرويبينآنهارا
بادرنظرگرفتنفاصلهيذراتديگرنسبتبهآنبااستفادهاز
سپسبهازايهرذره،
ذرهيمشخص،برايندنيروهابرآنذرهرادرزمهانt = 0
همهينيروهايواردبرآن
حسابکنيدوباجمعُبرداري
محاسبهکنيد.
شکل4
يآيد:
سپسبااستفادهازرابطهي(2اشتابجديدهرذرهبهدستم
وپسازآنسرعتومکانجديدذره.
يشود.
اينکاربرايهريکازذراتتکرارم
ددرلحظهي،tمقاديرجديد(شتاب،سرعت،ومکانامربوطبهمهثًًذرهيPبههدسهتآمهدو
نکته:فرضکني
رمربوطبهذرهي'Pرامحاسبهکنيد.حالچنانچهاينمقاديرمربوطبهPراهمانلحظههدر
آمادههستيدتامقادي
ادامهيمحاسهبات(مهثًًبههدسهتآوردنپارامترههاي'Pامقهادير
برنامهتغييردهيدوبهروزرسانيکنيد،براي
يشود.چراکهمقدارمکانPتغييرکردهاست.
يباشدوبرنامهدچاراشتباهم
معتبريموجودنم
برايرفعاينمسئلهبايدابتدامقاديرمکانهايجديدتمامذراتمحاسبهشوند،سهپسدرپايهان،iterationآن
مقاديربهروزرسانيشوند.يکراهبرايانجاماينکاراينستکهدوکپيازپارامترههايمکهانتمهامذراتداشهته
نمحاسبهيمکانهايجديد،مقاديررادرکپيدومذخيرهکنيدودرپايانهرتکرارشبيهسازيدر
باشيد.درحي
زمانخا
،tمقاديررابهکپياولمنتقلکنيد.
صفحه5
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
ييابدوعملياتفوقتکرارميشود،تازمهانيکههمکهانذرهي در
بهاندازهي افزايشم
پسازآنمقدارt
زمان10.0بهدستآيد(.طبيعتاًمکانذراتدرزمان10.0موقعيبهدستميآيدکهمقدارtبرابربا
شدهباشد.ا
.6خروجيبرنامه
ا،مقاديرزيررابادقت5رقماعشار(مميزثابتاوبايکفاصله
برنامهبايدبهازايزمانهايصحيح(
بينآنهادرخروجيچاپکند.
مقاديرخروجي:
] [
] [
] [
] [
] [
] [
که
دقتنماييدکهمنظوراز] [
ذرهي
مقداربُعد ازبُردارمکان
ستون8ا،درزمان استومنظوراز] [
ذرهيواقعدرمختصاتسطر6و
(يعني
ذرهي است.
،همانمقداربراي
بهعنوانمثالاولينسطرخروجيبرنامهبهصورتزيراست:
0.00000 15.00000 3.36660 8.00000 6.00000 7.00000 6.00000
ودومينخروجيبهصورتزير:
1.00000 6.44218 5.74259 9.14483 7.37202 7.38368 7.00595
پسازپيادهسازيمواردفوق،قابليتنوشتنخروجيدرفايلرابهبرنامهاضافهنماييد.برنامهبايهدهمزمهانکهه
ينمايد،آنهارادرفايليمتنيبانامoutput.txtهرکدامرادريکسطربنويسد.
يهايفوقراچاپم
خروج
يکخروجينمونهازشرو اجرايبرنامهبهصورتزيراست:
6.00000 7.00000 6.00000
7.37202 7.38368 7.00595
8.85286 7.48553 11.40256
10.01744 8.30381 15.54128
11.29076 9.45098 19.28413
8.00000
9.14483
11.88086
15.23368
18.85997
15.00000 3.36660
6.44218 5.74259
4.44543 2.45123
3.61449 -0.69237
3.44548 -3.88554
0.00000
1.00000
2.00000
3.00000
4.00000
…
تذکرمهم:تماماعدادخروجيرابادقت5رقماعشارمميزثابتچاپنماييد(چههدرصهفحهي
نمايشوچهدرفايلاوبيناعداديکفاصله(Spaceاقراردهيد.
قسمتهايبرنامهبرايمتغيرهايحقيقي،ازنو doubleاستفادهکنيد.
توجه:درتمام
صفحه6
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
.7تستپروژهتوسطخودتان
شدهيزير،مقاديرمتناظرزيهررا
مشخص
ددرزمانهاي
ادهسازيکردهباشيد،باي
درصورتيکهپروژهرادرستپي
دريافتکنيد:7
] [
] [
] [
] [
] [
] [
6.18834
7.35265
6.17785
8.56929
6.08316
8.66387
0.68000
16.55993
8.59694
10.35019
16.19300
-1.54594
3.54779
3.27000
22.23772
10.43484
12.37016
21.83344
-6.39949
3.38177
4.79000
27.78800
12.35248
14.51730
27.51889
-10.96488
3.33659
6.26000
34.81958
14.83645
17.39093
34.80250
-16.54587
3.35933
8.10000
41.80038
17.32799
20.35405
42.07380
-21.97189
3.41334
9.91000
نمرهدهي
.8سياست
برنامهيشمابايدقابلcompileواجراباشد.کامپايلرمورداستنادDev-C++خواهدبود.رعايتفرمهتخروجهي
درپروژهيشماپيادهسازيشدهباشهدکهه
برنامهالزامياست.هريکازبخشهايذکرشدهاجبارياستوبايد
يدهد.
نمرهيخامشماراتشکيلم
دربرنامهيخودتاحدامکانرعايتکنيد.برنامههرابههتهابعههايکهوچکتر
ساختيافتهرا
اصولبرنامهنويسي
بشکنيد.ازنوشتنکلبرنامهدرتابعmainيادريکتابعخا خودداريکنيدتامتحملکسرنمرهنشويد.بهراي
توابعمهمبرنامهکامنتهايمختصرومفيدبنويسيد.
همهي
يشدهرادرآنمستندسازي8
ادهساز
کازقسمتهايپي
يکفايلMS WordياPDFجداگانهدرنظربگيريدوهري
مصفحهيايکپاراگرا ا.
کنيد(هرکدامحداقلدرحدني
نمرهياضافه
رنمرهياضافيبههمراهخواهندداشت:
قسمتهايزي
ادهسازيهريکاز
پي
انتقالخروجيبرنامهازفايلمتنيبهمحيط(MS Excelبهصورتدستياورسمنمهودارحرکهتذرات
براساسدادههايمنتقلشده
اشارهشده
نحوهيحرکتذراتموردنظر.براياينکهارمهيتوانيهدازکامپهايلر
برنامهنويسيبراينمايشگرافيکي
دلخواهخوداستفادهکنيد.
7
توانيدبرنامهيموجوددرلينکزيررادانلودواجهراکنيهد.
يتعاملذراتموردنظرمي
برايبهدستآوردندر شهوديبهترازنحوه
اينبرنامهبراياجرابه.NET.Framework 2ياباالترنيازدارد http://www.mediafire.com/?dnqnzmoycdusror:
8
Document
صفحه7
مسالپاييز1911-11
ني
شمارهي1
ينهاييدرسمبانيبرنامهنويسي-C/C++
پروژه
مشمولنمرهياضافيخواهندشدکهخروجيرادرستنمايشدهند.
مواردباالبهشرطي
نمرهيمنفي!
ازکپيبرداريازديگرانخوددارينماييدومخصوصاًازمحولنمودنپيادهسازيپروژهبهکسيغيرازخوداکيهداً
پرهيزکنيد.تشخيصاينکهبرنامهتوسطخوددانشجونوشتهشدهاستياخيربسيارسادهاست.درصورتيکهه
برنامهراخودتاننوشتهباشيد،ممتحنينحداکثرتخفيفرادرهنگامبررسيمهدنظرقهرارخواهنهدداد.امهادر
تخلفعذروبهانهايپذيرفتنينيست.
صورتمشاهدهي
حلتمريندرسراهنماييبخواهيهد،امهااز
چنانچههنوزدربرنامهنويسيمشکلداريد،ازکسانيکهميشناسيدوازافراد
يبرداريناآگاهانهجداًخودداريکنيد.
کپ
نحوهيتحويلپروژه
.1
پروژهيبههمراهمستنداتحداکثرتا48ساعتقبلازتحويلحضوريبايدبهآدرسايميهلتمرينهات
فايلهاي
يشوند.
ارسالشوند.برنامههاييکهدرروزتحويلآوردهشوندپذيرفتهنم
([email protected]ا
فرمتارسال
فايلهايپروژهراپسازzipکردن،بههصهورتproject1_STDID.zipنهامگهذاريکنيهدکههSTDIDشهمارهي
دانشجوييشمااست.بهعنوانمثال:
project1_86202228.zip
توجه:ازقراردادنفايل.exeدرفايلپروژهجداًپرهيزکنيد.
تحويلحضوري
درزمانتحويلبايدبررويقسمتهايمختلفپروژهتسلطکاملداشتهباشيد.ازبخشههايمختلهفبرنامههاز
شماسؤالخواهدشد.
.11مراجع
[1] http://en.wikipedia.org/wiki/Molecular_dynamics
[2] http://en.wikipedia.org/wiki/Newton's_laws_of_motion
[3] http://www.ph.biu.ac.il/~rapaport/visint/04_examp_moldyn.html
«موف باشيد»
صفحه8
© Copyright 2026 Paperzz