首页 文章

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

提问于
浏览
0

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

3 回答

  • 0

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

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

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

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

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

    现在你有一个算法,你可以尝试编码它!

  • 0

    简单的数学......

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

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

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

    • 排除外边框
      你只需要检查像素 x in [xc - r, xc + r] U y in [yc - r, yc + r]

    • 自动包含铭刻方格
      您可以在 x in (xc - sqrt(2)r, xc + sqrt(2)r) U (yc - sqrt(2)r, yc + sqrt(2)r) 中包含每个像素

    引用:

    Circles Inscribed in Squares

    Squares Circumscribed by Circles

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

相关问题