پنجشنبه, ۵ دی ۱۳۹۸، ۰۱:۱۰ ق.ظ
تعیین اینکه نقطهای در زاویه دید قرار داره ( Determining that the point is inside the view angle )
برای اینکه مشخص شود که نقطهای در زاویه دید یک نقطه مرجع دیگر با زاویه مشخص شده با دو خط قرار دارد یا نه، کافی که مختصات نقطه هدف و انتهای دو خط را مشخص کرده و پس از انتقال مبداء به نقطه مرجع و تبدیل آنها به مختصات قطبی در 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; [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=isItBetweenAng(tAtet,tDtet,tCtet); figure;plot([Px, Ax],[Py, Ay],'c');hold on;plot([Px, Cx],[Py, Cy],'c');hold on;plot( Dx, Dy,'rO'); switch fg case 1 title( 'it is in angle point' ) case 0 title('it is not in angle point') end end function fg=isItBetweenAng(num1,quNum,num2) fg=0; [val,~]=sort([num1,num2],'ascend'); if (num1<=pi && num2<=pi ) || (num1 >=pi && num2>=pi ) if quNum>=val(1) && quNum<=val(2) fg=1; end else if val(2)-val(1)>pi if (quNum<=val(1) && quNum>=0 ) || (quNum>=val(2) && quNum<=val(2) ) fg=1; end else if (quNum>=val(1) && quNum<=pi ) || (quNum>=pi && quNum<=val(2) ) fg=1; end end 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=12; quPoint.y=8; fg2=IsPointInsideAngle(basePoint,leftPoint,rightPoint,quPoint );
خروجی به شکل 1و 0 خواهد بود.
the output will be as 1 , 0 or true and false
۹۸/۱۰/۰۵