برای اینکه مشخص شود که نقطه‌ای در زاویه دید یک نقطه مرجع دیگر با زاویه مشخص شده با دو خط قرار دارد یا نه، کافی که مختصات نقطه هدف و انتهای دو خط را مشخص  کرده و پس از انتقال مبداء به نقطه مرجع  و تبدیل آن‌ها به مختصات قطبی در 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

 

 این کد نتیجه درستی نمی ده بزودی اصلاح و باز ارسال می شه.

this code hase incorrect result , it will correct and will send again.

 


مشخصات

آخرین مطالب این وبلاگ

آخرین ارسال ها

آخرین وبلاگ ها

آخرین جستجو ها