با سلام
کدی که من نوشتم بر این اساس کار می کنه که .....
اولا بگم که در زبانهای ویژوال مثل وی بی و دلفی و سی شارپ(و بقیه دات نتی ها) ابزاری به نام تایمر دارید که مثلا روی 50 وقتی بذارید اینتروالش را هر 50 هزارم ثانیه یک بار کدهای داخلش اجرا میشه.
ولی در سی مثلا با توربو سی 3 این تایمر را نداریم. نمی دونم اونجا راه درست چیه ولی من از حلقه استفاده کردم.
در تاپیک زیر:
http://forum.majidonline.com/showthread.php?t=63154
در زبان سی هم با زمان کار شده هم با حلقه.
========================
الگوریتم.
توپی به سمت راست و بالا حرکت می کند.
خصوصیت Left و top آن در این برنامه تنها راه کنترل ماست.
در تایمر کدی وجود دارد که لفت آن را با هر بار اجرای کدهای داخل تایمر مقداری اضافه می کند. این مقداری همان v است یعنی سرعت اولیه توپ. ولی بایستی تصحیح شود که من جلوی آن جهت وزش باد و مقاومت هوا را تذکر دادم. اگر مقاومت هوا را لحاظ نکنید پرتاب در سطح ماه را نمایش می دهد. ولی در روی زمین مقاومت هوا حالت خاصی می دهد. اکثر بازیهای ساخته شده فکر کنم این مقاومت هوا را لحاظ نمی کنند. مثلا بازی تلویزیون و پرتاب در خلا به نظر می رسد.
اما می رسیم به جهت عمودی:
توپ به سمت بالا شوت میشه ولی رفته رفته سرعتش کم میشه تا به نقطه اوج می رسد و بر می گردد . و در حال پایین اومدن هم رفته رفته سرعتش زیاد میشه. gt همان کاهش است. یعنی شتاب جاذبه ضربدر زمان.
من داخل تایمر زمان را شمردم. همان time=time+1 در زبان سی داخل حلقه هم فکر کنم بشه زمان را شمرد. هر دور چرخش حلقه را فرض کنید یک اجرای تایمر برنامه ماست ولی چون چرخش حلقه سریع است باید ضرایب تصحیح بشه.
بله داشتیم می گفتیم. در جهت عمودی با استفاده از زمان سرعت تعیین شد در فرمول v := v-9.8*time/500 اون تقسیم بر 500 هم برای تنظیم است. کلا همه ضرایب را موقع اجرا ست کنید تا تنیجه دلخواه در بیاد . در خط بعدی ball.Left := ball.Left+1 توپ با سرعت ثابت به راست میره که بحث شد که نباید چنین باشه(باد و اصطحکاک) . در خط بعدی ball.top := ball.top-Ceil(v); ارتفاع توپ با توجه به سرعت تعیین میشه. در خط بعدیش هم بررسی شده که آیا توپ به زمین خورده یا نه. چون زمین نیروی مقاومی است که تمام معادلات را تغییر می دهد. ممکنه در اینجا بخواهید جهش دوباره توپ را بسازید که بحث دیگری است.
====================
نکته ای راجع به مقاومت هوا : این کاهش سرعت در موقع صعود توپ و سقوط توپ هم باید لحاظ بشه.
و باید وابسته به سرعت توپ مقدار مقاومت حساب بشه. مربوط میشه به مکانیک سیالات. در فیزیک دبیرستان هم دیدید که در سرعتهای بالا پشت جسم جریانهای گردابی به وجود میاد که باعث مقاومت بیشتره و در سرعتهای بالاتر از سرعت صوت مسئله شکستن دیوار صوتی مطرح میشه و کلا فرمولها فرق داره. ولی اگر دنبال این مقدار دقت نیستید که هیچی.