سلام.
با تشکر از راهنمایی دوستان، من هم چند تا نکته اضافه کنم.
برای حرکت پرتابه در دو بعد، برای قسمت X (حرکت افقی) لازم نیست محاسبات خاصی انجام بدید (با زمان تغییر میکنه، همین.) میتونید با صرف نظر از اصطکاک و .... اون رو یک تغییر کاملا خطی در نظر بگیرید.
میمونه حرکت Y (حرکت در راستای عمود) که با تابع y = 1/2 gt2 + v0t قابل محاسبه هست. به تابعی که من با دلفی نوشتم دقت کنید:
function GetPosOfPartabeh(out pOut : TVec2D; const pPart : PPartabeh):PVec2D;
var
time_ : Double;
begin
time_ := GetNow - pPart^.t0;
pOut.x := pPart^.x0 + pPart^.vx0 * time_;
pOut.y := pPart^.y0 - 0.5 * CF_G * Sqr(time_) + pPart^.vy0 * time_;
Result := @pOut;
end;
قسمت X کاملا یک تابع خطی هست. یعنی نقطه شروه به اضافه سرعت در زمان (دلتا ایکس) تغییرات مکان.
پس ما حرکت رو برای دو مولفه ی x و y به شکل جدا و مستقل حساب کردیم. اینطوری مسئله رو ساده تر میکنیم.
------------------------------------------------------
در مورد برخورد بازمین هم من یک روشی به ذهنم رسیده بود که تو اون تاپیک کدش هست. من ابتدا فرض رو بر این میگیرم که اگر زمین نباشه توپ تا کجا پیش میره؟....یعنی مکان مجازی توپ داخل زمین...بعد اون بردار رو آینه کردم به بالا....البته با توجه به مکان برخورد! جکع و تفریق برداری لازم داره.
برای آینه کردن بردار نسبت به زمین، X تغییر نمیکنه فقط باید y جدید رو پیدا کنید. ارتفاع نهایی (داخل زمین) منهای ارتفاع سطح زمین (میتونه صفر در نظر گرفته بشه...بستگی به محل زمین شما در نقطه ی برخورد داره که چقدر در نظر گرفته باشید.) و قرینه کردن این مقدار:
y = earth_y - y1
من تو صحبت هام توپ رو با شعاع صفر فرض کردم (مرکز توپ رو جابجا میکردم) حالا که صحبت خورد به میون میاد لازمه که شعاع توپ هم در نظر گرفته بشه که چیزه خاصی نیست. یک جمع و تفریق ساده هست که نشون میده سطح توپ زودتر از مرکز توپ به زمین میرسه (مجازی) پس در آینه کردن اون رو هم لحاظ میکنیم.
در مورد واحد های اندازه گیری نظر من اینه که با واحد های فیزیکی محاسبات رو انجام بدید و حتما هم اعشاری. بعد برای نمایش اطلاعات رو به مختصات دو بعدی تصویر پیکسلیتون تبدیل کنید. با مختصات پیکسلی محاسبات رو انجام ندید!!! یک ضریب بزرگنمایی و یک Offset (نقطه صفر و یا جابجایی کلی) برای نمایش تصویر در نظر بگیرید که موقع نمایش با یک ضرب و جمع ساده بتونید مختصات اعشاری که متلا بر حسب متر هست رو به مختصات پیکسلی تبدیل کنید.
و یک نکته ی مهم اینکه مختصات Y در صفحه نمایش (پیکسلی) از بالا به پایین در جهت مثبت افزایش پیدا میکنه در حالی که در ریاضیات و مختصات دکارتی از پایین به بالا هست!!! یعنی فکر میکنم لازمه جهت Y رو برای تبدیل به مختصات نمایش در یک منفی ضرب کنید.
اگر باز هم مبهم بود بفرمایید.