我有编写C ++课程的程序。在坐标平面中,我们有半径为R的圆。圆心位于点(xc,yc)。我也有坐标的n点(例如n = 2,坐标是(1; 1)( - 1; -1)。我需要计算一个圆圈,它上面和外面有多少个点。请帮助:)
答案 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答案,并检查飞机上每个点的距离。
您可能需要考虑两个优化:
排除外部边界框
您只需要检查像素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)
参考: