2013-05-01 48 views
0

我想要檢查的功能,如果一個點爲菱形與否的範圍,範圍菱形

Bool Conditional::InRange(Point P) 
{ 
    if((P.x > Position.x-100) && (P.x < Position.x+100) && 
     (P.y > Position.y-60) && (P.y < Position.y+60)) 
     return true; 
    else 
     return false; 
} 

我結束了一個矩形範圍內如何使這個範圍內是一個菱形? ? ,其中位置是中心和高度= 120寬度= 200

+0

首先一個技巧:如同任何函數'如果(富)返回true;否則返回false;'應該寫得更簡單'return foo;'。 – 2013-05-01 08:13:40

+0

@Nate請參考數學解釋http://math.stackexchange.com/questions/312403/how-do-i-determine-if-a-point-is-within-a-rhombus – 2013-05-01 08:21:12

+0

是否有任何幾何限制你的菱形?它的「底部」邊緣是否與您的飛機平齊? – 2013-05-01 08:54:13

回答

0

菱形座標是A,B,C,d

和點爲P,我們需要檢查。

查找角度

之間

PA,PB - 角度1

PB,PC - angle2

PC,PD - angle3

PD,PA - angle4

現在,如果總和所有角度是360或-360,那麼P在ABCD 之內,否則它位於外部。

角度您可以使用斜率截取形式找到。

即米=你實測值(Y2-Y1)/(X2-X1)

後斜率例如對於p線段斜率爲m1 爲m1 對於pb線段斜率爲m2 則可以通過tan(角度)=(m1-m2)/(1 + m1 * m2)計算角度。

OR

你可以使用這個鏈接

http://en.wikipedia.org/wiki/Point_in_polygon 
+0

感謝您的回覆,但是我怎樣才能通過斜坡獲得角度? – Nate 2013-05-01 10:05:41

+0

@Nate找到斜坡後對於pa線段斜率爲m1,對於pb線段斜率爲m2,則角度可以通過tan(角度)=(m1-m2)/(1 + m1 * m2)來計算。 – 2013-05-01 10:25:59

+0

再次感謝,我希望你不會打擾你:),但我需要角度,所以我得到棕褐色的答案? – Nate 2013-05-01 10:37:43