检查点是否在多边形内

时间:2018-02-08 08:44:34

标签: c# opengl math opentk

我创建了一个对象类并在其上设置了mouseEnter事件。 Object描述了使用opengl创建圆的过程(这里是绘制过程函数):

public void DrawCicrle()
        {
            GL.Begin(PrimitiveType.TriangleFan);
            GL.Color4(Color_);
            GL.Vertex2(X_, Y_);
            for (int i = 0; i < 360; i++)
            {
                GL.Vertex2(X_ + Math.Cos(i) * Radius_, Y_ + Math.Sin(i) * Radius_);

            }
            GL.End();

        }

然后我做了一个mouseEvent,但是无法正确获取光标的坐标。在圆弧中获得点的正确条件是什么? 此函数返回一个点,但左侧有一点偏移(X_和Y_是圆的中心(双重类型)Radius_也是双重类型):

public Point CursorLocation
        {
            get
            {
                return CursorLocation_;
            }
            set
            {
                this.CursorLocation_ = value;
                for (int i = 0; i < 360; i++)
                {
                    if (CursorLocation_.X <= X_ + Math.Cos(i) * Radius_ && CursorLocation_.Y<= Y_ + Math.Sin(i) * Radius_ && CursorLocation_.Y>=Y_-Radius_)
                    {
                        Enter(new Point(CursorLocation_.X, CursorLocation_.Y));
                        break;
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

条件是dx * dx + dy * dy&lt; R * R,其中dx = Math.Abs​​(x-cx),dy = Math.Abs​​(y-cy)

(x,y)是光标位置,(cx,cy)是圆心

所以你检查圆心和一些点之间的欧几里德距离。为避免平方根计算,您只需将比较的两边都平方

如果您还想要计算圆圈边框

,请使用&lt; =