我有编写C课程的程序 . 在坐标平面中,我们有半径为R的圆 . 圆心位于点(xc,yc) . 我也有坐标的n点(例如n = 2,坐标是(1; 1)( - 1; -1) . 我需要计算一个圆圈,它上面和外面有多少个点 . 请帮忙 :)
您需要计算圆心和点之间的距离 . 两点之间的距离公式为:
d = sqrt( (xc - x)^2 + (yc - y)^2 )
其中:(xc,yc) - 圆心的坐标,(x,y) - 你的点的坐标 .
如果距离大于半径,则点在圆外(d> R)
然后你需要重复这个n点,并记住它们中有多少是在里面,有多少在外面 . 就这样 .
现在你有一个算法,你可以尝试编码它!
简单的数学......
正方形的表面由 S = pi*r^2 计算以像素为单位给出r,S将以像素为单位...
S = pi*r^2
值得注意的是,这种方法是近似的,因为它不是在一个离散的平面上
为了更精确(但速度相当慢):参考@Sandro答案,并检查飞机上每个点的距离..您可能需要考虑两个优化:
排除外边框你只需要检查像素 x in [xc - r, xc + r] U y in [yc - r, yc + r]
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) 中包含每个像素
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
圆的方程: R^2 = (xc - x)^2 + (yc-y)^2 其中 (xc, yc) 是圆心的坐标 . (x, y) - 点坐标,R - 半径 . 所以:
R^2 = (xc - x)^2 + (yc-y)^2
(xc, yc)
(x, y)
double distance = sqrt((xc - x)*(xc - x) + (yc-y)*(yc-y)); if (distance < R) { // inside } else if(distance > R) { // outside } else { // on circle }
3 回答
您需要计算圆心和点之间的距离 . 两点之间的距离公式为:
其中:(xc,yc) - 圆心的坐标,(x,y) - 你的点的坐标 .
如果距离大于半径,则点在圆外(d> R)
然后你需要重复这个n点,并记住它们中有多少是在里面,有多少在外面 . 就这样 .
现在你有一个算法,你可以尝试编码它!
简单的数学......
正方形的表面由
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
圆的方程:
R^2 = (xc - x)^2 + (yc-y)^2
其中(xc, yc)
是圆心的坐标 .(x, y)
- 点坐标,R - 半径 . 所以: