2

我在按钮中间画了一个假想的圆圈。

圆的半径是Height/2ifHeight>WidthWidth/2if Width>Height。现在我必须计算这个圆中的坐标(以像素为单位)。这个想法是,如果例如鼠标光标悬停在那个圆圈上,就会发生一些事情。

4

4 回答 4

4

计算每个坐标是多余的;只是比较到中心的距离。例如:

int radius = 5; // whatever

int deltaX = originX - mouseX, deltaY = originY - mouseY;

// compare the square distance, to avoid an unnecessary square-root
if((deltaX * deltaX) + (deltaY * deltaY) <= (radius * radius)) {
    // inside the circle, or on the edge
}

为了避免一些数学问题,您还可以进行快速边界框检查,即检查矩形区域(只是加法/减法)。这可以组合使用,即

  • 检查边界框
    • 如果它不在边界框内,它肯定不在圆圈内
    • 如果它边界框中,请进行数学计算以比较平方距离
于 2012-09-11T07:26:13.820 回答
3

当满足这个方程时,你就在圆圈内:

Math.pow(mouse_pos_x-center_circle_x,2)+Math.pow(mouse_pos_y-center_circle_y,2)<Math.pow(radius,2)
于 2012-09-11T07:26:30.850 回答
1

根据定义,圆的面积是距离等于或小于圆心的一组点。

要测试一个点是否在一个圆内,您必须做的就是计算它与中心点之间的距离。如果该距离小于圆的半径,则该点在圆内。

double Distance(Point p1, Point p2)
{
    int x = p1.X - p2.X;
    int y = p1.Y - p2.Y;
    return Math.Sqrt(x * x + y * y);   
}
于 2012-09-11T07:27:06.607 回答
1

您可以使用下一个条件:

x^2+y^2<R^2

其中 R - 半径,所有这些点都在圆圈中。

于 2012-09-11T07:28:14.217 回答