Identity Of Code

هیچی و همه چی

Identity Of Code

هیچی و همه چی

نکاتی در مورد برخورد الاستیک

در برخورد الاستیک طبق قانون پایستگی انرژی ،همواره انرژی ثابته،بنابرین برایند سرعت دو جسم قبل برخورد برابر با مجموع سرعت بعد برخورده،کلا برای شبیه سازی برخورد باید  یک سری کارای عمده رو انجام بدیم


1-تشخیص

2-تغییر موقعیت | repositioning|

3-محاسبه سرعت جدید

 

 

تشخیص سادست ، هرگاه فاصله دو جسممون ( اجسام در این نوع برخورد ها دایره شکل هستند) از برایند شعاع دو جسم کمتر بشه یعنی برخورد رخ داده،احتمال داره بعد از برخورد تو رفتگی ایجاد شده باشه  بنا برین باید تغیر موقعیت پیدا کنه ،اگه فاصله این در هم رفتگی رو L  در نظر بگیریم ؛ هرکدوم از اشیامون باید به مقدار L/2 روی محور فاصله تغیر موقعیت بدن، یکی کم و یکی زیاد ;و برای تعین سرعت های جدید باید محاسبات برداری انجام بدیم که عکسا بهتر توضیح میدن


var dist:Vec2=p1.loc.subOf(p2.loc)

var rads:Number=p1.rad+p2.rad

                    

if(dist.length<(rads) && p1!=p2  ){

                                 

var v1:Vec2=p1.velo.clone()

var v2:Vec2=p2.velo.clone()

var l:Number=(dist.length-rads)

var movefactor:Vec2=dist.unit().scaleOf(l/2)

p1.loc.dec(movefactor)

p2.loc.inc(movefactor)

                    

var u1:Vec2=v1.project(dist)

var u2:Vec2=v2.project(dist)

var u1_u2:Vec2=u1.subOf(u2)

                                          

var newv1:Vec2=v1.addOf(u1_u2.scaleOf(-1))

var newv2:Vec2=v2.addOf(u1_u2)


روش دوم که میشه حرکت inelastic هم پیاده سازی کرد اینه که بعد از تشخیص برخورد 

1-بردار بین مرکز دو شی رو به دست میاریم و همچنین بردار نرمال ان را

2-بردار سرعت را روی این دو بردار project میکنیم
حال دو بردار تجزیه شده داریم که هرکدوم دارای دو بردار v1normal  سایه شده بردار v1 روی بردار واحد  dist  و v1tan بردار تصویر همان بردار سرعت روی بردار عمود dist ،حالا میتونیم عملیات جبری مربوط به سرعت elastic یا inelastic رو روی این دو مولفه ها انجام بدیم ، و در آخر دو مولفه رو جمع میکنیم تا بردار سرعت  جدید بدست بیاد، برای مثال :

var normal:Vec2=dist.unit()

var tan:Vec2=new Vec2(normal.y*-1,normal.x)

var p1_normal:Number=normal.dot(v1)

var p2_normal:Number=normal.dot(v2)

var p1_tan:Number=tan.dot(v1)

var p2_tan:Number=tan.dot(v2)

                                 

var u1:Number,u2:Number

var m1:Number=p1.mass

var m2:Number=p2.mass

                                 

u1=(p1_normal * (m1 - m2) +2 * m2 * p2_normal) / (m1 + m2);

u2=(p2_normal * (m2 - m1) +2 * m1 * p1_normal) / (m1 + m2);

var p1_normalafter_vec:Vec2=normal.scaleOf(u1)

var p2_normalafter_vec:Vec2=normal.scaleOf(u2)

var p1_tan_vec:Vec2=tan.scaleOf(p1_tan)

var p2_tan_vec:Vec2=tan.scaleOf(p2_tan)

p1.velo=p1_tan_vec.addOf(p1_normalafter_vec)

p2.velo=p2_tan_vec.addOf(p2_normalafter_vec)    

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد