۰۵-بهمن-۱۳۸۷, ۰۸:۵۶:۵۳
چگونه بررسی کنیم که دو شئ چگونه با هم برخورد می کنند و چگونه الگوریتمی برای آن به کار ببریم تا به صحت این موضوع دست پیدا کنیم.
این اگوریتم معمولا برای درست کردن بازی به کار میره یا صحت وجود موس بر روی یک شی Object .
اشیای چهار گوش Rectangle Objects:
وقتی دو شی چهار گوش با هم بر خورد می کنند یکی از حالتهای زیر به وجود می آید :
یکی از نقاط چهار گوشه دو شی درون شی دیگر قرار گیرد .
یکی از اضلاع اشیاء بر هم مماس باشند .
یکی از دوشکل به طور کامل درون شی دیگر قرار بگیرد .
در این حالت ما با اگوریتمهای متفاوتی بر خورد می کنیم
در حالت اول برای بررسی درون گرایی می بایست نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده درون چهار چوب ما قرار دارد یا خیرو آیا نقطه داده شده شرایط زیر را دارد :
مختصات سمت چپ وبالای شی دوم از مختصات سمت چپ وبالای شی اول کوچکتر باشد
مختصات سمت راست وبالای شی اول از مختصات سمت چپ وبالای شی دوم بزرگتر باشد
مختصات سمت ر است وپایین شی اول از مختصات سمت چپ وبالای شی دوم بزرگتر باشد
مختصات سمت چپ وبالای شی دوم از مختصات سمت چپ وپایین شی اول بزرگتر باشد
در این حالت می توان گفت که شی دوم نقطه داده شده را در خود جای داده و تصادف رخ داده است . یادتان باشد که این نقطه می تواند هر نقطه دلخواه دیگری برای بررسی باشد
در حالت دوم برای بررسی تصادف به صورت مماس می بایست یک نقطه از نقاط اضلاع را انتخاب کردهو نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده برروی چهار چوب ما قرار دارد یا خیرو آیا نقطه داده شده شرایط زیر را دارد :
نقطه انتخاب شده را همانند بالا و با شرایط بالا برسی می کنیم با این تفاوت که نقطه داده شده در صورت مساوی بودن با خطوط مورد بررسی قرار می گیرد
در حالت سوم برای بررسی تصادف به صورت درون گرایی کامل می بایست یک نقطه از نقاط اضلاع را انتخاب کرده و نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده درون چهار چوب ما می باشد :
در ابتدا می بایست این موضوع را مد نظر بگیرید که اگر بزرگ را با شی کوچک مقایسه کنید جواب همیشه منفی . بنابر ای ن در ابتدا بررسی کنید که شی کوچکتر از شی دوم باشد
در مرحله بعد یک نقطه را از شئ دوم انتخاب کنید و سپس آن را مانند مراحل قبل مورد بررسی قرار دهید .
خوب اینم الگوریتم مقایسه که دو متغییر ر به عنوان ورودی دریافت کرده که یکی از نوع TPoint و دیگری از نوع TRect می باشد . این الگوریتم برنامه مختصات یک نقطه را گفته و با جعبه که به آن داده شده مقایسه می کند . که آیا نقطه درون حعبه می باشد یا خیر . (حالت اول و دوم)
این الگوریتمم برسی برای اینه که ببینه دوتا باکس با هم برخورد کردند یا خیر . بدین نحو که بررسی نقاط اصلی چهار گوشه شی داده شده را با جعبه مورد نظر بررسی می کند .
این اگوریتم معمولا برای درست کردن بازی به کار میره یا صحت وجود موس بر روی یک شی Object .
اشیای چهار گوش Rectangle Objects:
وقتی دو شی چهار گوش با هم بر خورد می کنند یکی از حالتهای زیر به وجود می آید :
یکی از نقاط چهار گوشه دو شی درون شی دیگر قرار گیرد .
یکی از اضلاع اشیاء بر هم مماس باشند .
یکی از دوشکل به طور کامل درون شی دیگر قرار بگیرد .
در این حالت ما با اگوریتمهای متفاوتی بر خورد می کنیم
در حالت اول برای بررسی درون گرایی می بایست نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده درون چهار چوب ما قرار دارد یا خیرو آیا نقطه داده شده شرایط زیر را دارد :
مختصات سمت چپ وبالای شی دوم از مختصات سمت چپ وبالای شی اول کوچکتر باشد
مختصات سمت راست وبالای شی اول از مختصات سمت چپ وبالای شی دوم بزرگتر باشد
مختصات سمت ر است وپایین شی اول از مختصات سمت چپ وبالای شی دوم بزرگتر باشد
مختصات سمت چپ وبالای شی دوم از مختصات سمت چپ وپایین شی اول بزرگتر باشد
در این حالت می توان گفت که شی دوم نقطه داده شده را در خود جای داده و تصادف رخ داده است . یادتان باشد که این نقطه می تواند هر نقطه دلخواه دیگری برای بررسی باشد
در حالت دوم برای بررسی تصادف به صورت مماس می بایست یک نقطه از نقاط اضلاع را انتخاب کردهو نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده برروی چهار چوب ما قرار دارد یا خیرو آیا نقطه داده شده شرایط زیر را دارد :
نقطه انتخاب شده را همانند بالا و با شرایط بالا برسی می کنیم با این تفاوت که نقطه داده شده در صورت مساوی بودن با خطوط مورد بررسی قرار می گیرد
در حالت سوم برای بررسی تصادف به صورت درون گرایی کامل می بایست یک نقطه از نقاط اضلاع را انتخاب کرده و نقطه مورد نظر را با حالتهای زیر بررسی کنیم که آیا نقطه داده شده درون چهار چوب ما می باشد :
در ابتدا می بایست این موضوع را مد نظر بگیرید که اگر بزرگ را با شی کوچک مقایسه کنید جواب همیشه منفی . بنابر ای ن در ابتدا بررسی کنید که شی کوچکتر از شی دوم باشد
در مرحله بعد یک نقطه را از شئ دوم انتخاب کنید و سپس آن را مانند مراحل قبل مورد بررسی قرار دهید .
خوب اینم الگوریتم مقایسه که دو متغییر ر به عنوان ورودی دریافت کرده که یکی از نوع TPoint و دیگری از نوع TRect می باشد . این الگوریتم برنامه مختصات یک نقطه را گفته و با جعبه که به آن داده شده مقایسه می کند . که آیا نقطه درون حعبه می باشد یا خیر . (حالت اول و دوم)
کد:
function InRect(Value:TPoint;Arect:TRect ):Boolean ;
begin
with Value,Arect do
begin
Result :=
((X >= Left) and (Y >= Top))
and
(( X <= Right) and (Y >=Top))
and
(( X >= Left) and (Y <= Bottom))
and
(( X <= Right) and (Y <= Bottom));
end;
end;
کد:
function BoundsInRect(Value,Arect:TRect):Boolean;
var
r2:Boolean ;
begin
r2 := inrect(Point(Value.Left,Value.Top),Arect);
r2 := R2 or inrect(Point(Value.Right,Value.Top),Arect);
r2 := R2 or inrect(Point(Value.Right ,Value.Bottom),Arect);
r2 := R2 or inrect(Point(Value.Left,Value.Bottom),Arect) ;
Result := r2 ;
end;