2013-05-01 46 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