prince_Persia_7
Well-Known Member
امروز داشتم واسه امتحان فیزیک میخوندم که یهو به ذهنم خورد چطوره قوانین فیزیک رو تو تری دی مکس پیاده کنم. بعد تصمیم گرفتم با استفاده از معادله سرعت یعنی :
y=-1/2gtt+v0t+y0
حرکت یک توپ رو با مکس اسکریپت پیاده سازی کنم . خلاصه تمام وقت امروزم صرف برنامه نویسی شد.
خب حالا یه سری توضیحات در مورد کدهایی که نوشتم میدم. (کد ها رو از پایین دانلود کنید)
برای اجرای کدهای اسکریپت توی محیط مکس دکمه ی F11 رو بزنید. سپس در پنجره ی باز شده از File گزینه ی New رو بزنید تا یه پنجره دیگه باز بشه. حالا تمامی کد ها رو کپی کرده و در این پنجره Paste کنید. و در آخر هم برای اجرا دکمه Crtl+E رو بزنید.
حالا میرم سراغ توضیحات در مورد کدها:
در 8 خط اول کد من چند تا متغیر قرار دادم که اگه توی مقادیر عددی شون دستکاری کنید حالت ها و شرایط مختلف شبیه سازی میشه.(متغیر های دیگه رو نباید دستکاری کرد) در مورد هرکدوم از متغیر ها هم توی عکس زیر توضیحشو نوشتم.
اما در مورد کد زیر :

به دلیل این که فریم های انیمیشن به صورت گسسته هستند و نه پیوسته به همین دلیل من مجبور شدم جاهایی که موقعیت توپ در سطح منفی هست اون رو در سطح صفر قرار بدم . البته چون من تازه دارم با مکس اسکریپ کار می کنم و هنوز با کدهای اون خیلی کم آشنا هستم از این روش استفاده کردم.
نکته : بهتره از واحدهای پیشفرض خود مکس استفاده کنید. یعنی توی Unit Setup واحد ها رو روی Generic Unit بزارین.
در ضمن بازم میگم من در MaxScript خیلی مبتدی هستم . مطمئنا راههای خیلی بهتری هم برا کد نویسی وجود داره که ایشالا در آینده یاد میگیرم.
کد:
o=60
v=2
Fr=0.85
F_A=2
g=9.8
r=20
f=30
n=100
v=v*f
i=0
k=sphere()
k.radius=r
k.segs=30
k.pos.z=50
animate on
(
for t=0 to n do
(
at time t
(
(k.pos.z=( (-0.5*(g+F_A)*i*i)+(v*i))+o )
i=(i+1)
up=(v*v*0.5/g+o)
o=0
if (k.pos.z==up) then
(
F_A=F_A*(-1)
v=(sqrt(2.0*g*up))
)
if ( (k.pos.z<=0) )
then
(
k.pos.z=0
i=1
if (t!=0) then
v=v*Fr
)
)
)
)