برای اینکه مشخص شود که نقطهای در زاویه دید یک نقطه مرجع دیگر با زاویه مشخص شده با دو خط قرار دارد یا نه، کافی که مختصات نقطه هدف و انتهای دو خط را مشخص کرده و پس از انتقال مبداء به نقطه مرجع و تبدیل آنها به مختصات قطبی در 360 درجه، مقادیر قطبی انتهای دو خط با مقادیر نقطه هدف مقایسه شود.
کد متلب کل عملیات فوق در زیر:(the related matlab code for this operation)
function fg=IsPointInsideAngle(basePoint,leftPoint,rightPoint,quPoint ) Px=basePoint.x; Py=basePoint.y; Ax=leftPoint.x; Ay=leftPoint.y; Cx=rightPoint.x; Cy=rightPoint.y; Dx=quPoint.x; Dy=quPoint.y; % transformed Ax and Cx tAx= Ax-Px; tAy= Ay-Py; tCx= Cx-Px; tCy= Cy-Py; tDx= Dx-Px; tDy= Dy-Py; figure;plot([0, tAx],[0, tAy],'c');hold on;plot([0, tCx],[0, tCy],'c');hold on;plot(tDx,tDy,'rO');hold on [tAtet,tArho]=cart2pol(tAx,tAy);tAtet=Angle2pol_To_1pol(tAtet,1); [tCtet,tCrho]=cart2pol(tCx,tCy); tCtet=Angle2pol_To_1pol(tCtet,1); [tDtet,tDrho]=cart2pol(tDx,tDy); tDtet=Angle2pol_To_1pol(tDtet,1); fg=isItBetween(tAtet,tDtet,tCtet); end function fg=isItBetween(num1,quNum,num2) fg=0; [val,~]=sort([num1,num2],'ascend'); if quNum>=val(1) && quNum<=val(2) fg=1; end end
دقت کنین دو تابع بالا در یک اسکریپت هم نام تابع اول باید قرار گیرد وگرنه می تونید دو تابع را در دو اسکریپت مجزا هم نام توابع مذکور قرار دهید
برای فراخوانی این تابع میتوانید از کد زیر استفاده کنید:( calling script of th above function)
basePoint.x=4; basePoint.y=8; leftPoint.x=16; leftPoint.y=18; rightPoint.x=20; rightPoint.y=6; quPoint.x=15; quPoint.y=13; fg2=IsPointInsideAngle(basePoint,leftPoint,rightPoint,quPoint );
خروجی به شکل 1و 0 خواهد بود.
the output will be as 1 , 0 or true and false
درباره این سایت