菱形的范围

时间:2013-05-01 08:08:35

标签: c++ range diamond-problem

我想创建一个函数来检查一个点是否在菱形范围内,

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;
}

我最终得到一个矩形范围如何使这个范围成为一个菱形? ,其中position是中心,height = 120 width = 200

1 个答案:

答案 0 :(得分:0)

菱形坐标是A,B,C,D

,我们需要检查点是P.

之间找到角度

pa,pb - angle1

pb,pc - angle2

pc,pd - angle3

pd,pa - angle4

现在,如果所有角度的总和为360或-360,则P在ABCD内 否则就在外面。

角度你可以找到使用斜率截距形式。

即。 m =(y2-y1)/(x2-x1)

找到斜坡后,例如  对于pa线段斜率是m1  对于pb线段斜率是m2  那么角度可以通过tan(角度)=(m1-m2)/(1 + m1 * m2)来计算;

OR

您可以使用此链接

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