首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩阵中的实心圆(二维数组)

矩阵中的实心圆(二维数组)
EN

Stack Overflow用户
提问于 2013-06-18 16:06:26
回答 4查看 11.1K关注 0票数 3

使用哪种算法来获取实心圆的点?

代码语言:javascript
运行
复制
int start_X = 30; // center point
int start_Y = 30;

int r = 5;

// current point
int x; 
int y;

if(?==true)
{
map2D[x][y] = 1; // for filled circle points
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-18 16:24:35

你会得到一个圆的方程式:

其中a和b是中心点坐标。所有满足这个方程的x&y点都是圆的一部分。要查看某个点(x1,y1)是否为,请检查是否

代码语言:javascript
运行
复制
((x1 - start_X) * (x1 - start_X) + (y1 - start_Y) * (y1 - start_Y)) <= r * r

<=符号也包括位于圆内的点。您可以安全地将点范围限制在区间start_X - r;startX + r和start_Y - r;startY +r中。

票数 14
EN

Stack Overflow用户

发布于 2013-06-18 16:21:58

您可以使用中心(start_Xstart_Y)在2r×2r的正方形区域上进行搜索:

代码语言:javascript
运行
复制
std::vector< std::pair<int> > circlePoints;

for(int i = start_X - r; i <= start_X + r; i++)
{
   for(int j = start_Y - r; j <= start_Y + r; j++)
   {
       if((i-r)*(i-r) + (j-r)*(j-r) <= r*r)
       {
         circlePoints.push_back(std::pair<int>(i,j));
       }
   }
}
票数 3
EN

Stack Overflow用户

发布于 2018-05-16 17:47:11

如果你想在不检查的情况下直接到达圆圈中的所有点,这是最好的方法。

代码语言:javascript
运行
复制
SatY = CenterY;//StartY + R
        for (int i = StartX; i < EndX; i++)
        {
            int StartY = (int)(SatY - Math.Sqrt(Math.Abs((R + i - StartX) * (R - i + StartX))));
            int EndY = (int)(SatY + Math.Sqrt(Math.Abs((R + i - StartX) * (R - i + StartX))));
            for (int j = StartY; j < EndY; j++)
            {
                // Do Job
            }
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17163636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档