我创建了一个对象类并在其上设置了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;
}
}
}
}
答案 0 :(得分:2)
条件是dx * dx + dy * dy&lt; R * R,其中dx = Math.Abs(x-cx),dy = Math.Abs(y-cy)
(x,y)是光标位置,(cx,cy)是圆心
所以你检查圆心和一些点之间的欧几里德距离。为避免平方根计算,您只需将比较的两边都平方
如果您还想要计算圆圈边框
,请使用&lt; =