C++ 按顺序计算圆周围的点
我改编了Mukund Sivaraman的一篇关于圆绘制的伟大文章中的一些代码,为给定圆上的每个点执行传递函数:C++ 按顺序计算圆周围的点,c++,algorithm,geometry,C++,Algorithm,Geometry,我改编了Mukund Sivaraman的一篇关于圆绘制的伟大文章中的一些代码,为给定圆上的每个点执行传递函数: template<class Function> static void For_each_point_on_circle(Image *image, int radius, Function function) { int x, y; int l; l = (int) radius * cos (M_PI / 4); for (x = 0
template<class Function>
static void For_each_point_on_circle(Image *image, int radius, Function function)
{
int x, y;
int l;
l = (int) radius * cos (M_PI / 4);
for (x = 0; x <= l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
function(image, x, y);
function(image, x, -y);
function(image, -x, y);
function(image, -x, -y);
function(image, y, x);
function(image, y, -x);
function(image, -y, x);
function(image, -y, -x);
}
}
模板
圆上每个点的静态空隙(图像*图像,整数半径,函数)
{
int x,y;
int l;
l=(int)半径*cos(μPI/4);
对于(x=0;x,这里有一篇关于以离散步骤绘制圆的文章。它的动机是用于数控机床步进电机控制器,但也许它可以满足您的需要
像这样的东西应该可以做到:
template<class Function>
static void For_each_point_on_circle(Image *image, int radius, Function function)
{
int x, y;
int l;
l = (int) radius * cos (M_PI / 4);
for (x = -l; x < l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
function(image, x, y);
}
for (x = -l; x < l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
function(image, y, -x);
}
for (x = -l; x < l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
function(image, -x, -y);
}
for (x = -l; x < l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
function(image, -y, x);
}
}
模板
圆上每个点的静态空隙(图像*图像,整数半径,函数)
{
int x,y;
int l;
l=(int)半径*cos(μPI/4);
对于(x=-l;x
圆上的点相距有多远?(1度?)彼此仅相距1个像素,不一定是固定的角度。谢谢。如果您想在偶数空间中圆(即使是弧长,而不是x轴)我建议使用极坐标,并根据要绘制的点的数量适当划分2*PI。明显的函数(图像、半径*cos(角度)、半径*sin(角度))有什么问题
?@Danny:保持像素坐标比尝试跨入极坐标更容易。圆周周围的角度像素间距不是恒定的。如果你想计算它,它将是角度和分辨率的函数。这非常接近,它会产生以下输出:。我会用它来填充孔,我现在应该没事了。我会的完成后用完整的代码更新主帖子。谢谢大家的帮助!@user1454345-这就是我在上面的评论中得到的。半径越大,问题就越严重。@atb-没关系,我错过了cos(M_PI/4)在计算l时考虑因素。虽然这有助于将其分解为4个循环,但它并不能真正解决问题。随着半径的增加,它最终将变得足够大,以便在一个象限内,相邻的x值将映射到不相邻的y值。我认为唯一的解决方法是为每个x值和sepa计算像素范围内每个y值的比率。它似乎对我尝试过的半径值有效,-渐变显示了像素的绘制顺序。@atb-你是对的,它在半径*半径变得太大时起作用。