如何计算坐标(x; y)在圆内/上/外的点数

时间:2017-10-16 18:05:12

标签: c++

我有编写C ++课程的程序。在坐标平面中,我们有半径为R的圆。圆心位于点(xc,yc)。我也有坐标的n点(例如n = 2,坐标是(1; 1)( - 1; -1)。我需要计算一个圆圈,它上面和外面有多少个点。请帮助:)

3 个答案:

答案 0 :(得分:0)

您需要计算圆心和点之间的距离。两点之间的距离公式为:

d = sqrt( (xc - x)^2 + (yc - y)^2 )

其中:(xc,yc) - 圆心的坐标,(x,y) - 你的点的坐标。

如果距离大于半径,则点在圆外(d> R)

然后你需要重复这个n点,并记住它们中有多少是在里面,有多少在外面。这就是全部。

现在你有了一个可以尝试编码的算法!

答案 1 :(得分:0)

圆的方程:R^2 = (xc - x)^2 + (yc-y)^2其中(xc, yc)是圆心的坐标。 (x, y) - 点的坐标,R - 半径。所以:

double distance = sqrt((xc - x)*(xc - x) + (yc-y)*(yc-y));
if (distance < R)
{
    // inside
}
else if(distance > R)
{
    // outside
}
else
{
    // on circle 
}

答案 2 :(得分:0)

简单的数学......

正方形的表面由S = pi*r^2计算 以像素为单位给出r,S将以像素为单位......

值得注意的是,这种方法是近似的,因为它不是在一个离散的平面上

为了更精确(但速度慢得多):
参考@Sandro答案,并检查飞机上每个点的距离。
您可能需要考虑两个优化:

  1. 排除外部边界框
    您只需要检查像素x in [xc - r, xc + r] U y in [yc - r, yc + r]

  2. 自动包含铭刻方形
    您可以在x in (xc - sqrt(2)r, xc + sqrt(2)r) U (yc - sqrt(2)r, yc + sqrt(2)r)

  3. 中包含每个像素

    参考:

    Circles Inscribed in Squares

    Squares Circumscribed by Circles