是否有更好更快的方法来填充圆弧(以像素为单位)?

时间:2013-01-28 01:30:22

标签: c++ algorithm

是否有更好更快的方法来填充圆弧? 我传递到中心,半径,最小和最大角度(弧角)的函数坐标。 此刻,我返回圆圈内的所有像素(x,y,r)并检查角度之间的角度是否插入结果中。 // lineTo(bresenham)是返回两个像素之间点的函数

float calculateAngle(float x0, floaty0, float x1, float y1);// returns angle between two points and x axis

std::set< std::pair<int,int> > Board::getFilledCellsinRadius(const int x,const int y,const int r, float alpha1, float alpha2)
{
    std::set< std::pair<int,int> > result;
    int x1;
    int x2;
    int counter=(y+r);
    for(int count=(y-r);count<=counter;count++)
    {
        x1=int(x+sqrt(static_cast<double>((r*r)-((count-y)*(count-y)))+0.5));
        x2=int(x-sqrt(static_cast<double>((r*r)-((count-y)*(count-y)))+0.5));

        std::set< std::pair<int,int> > temp=lineTo(x1,count,x2,count);
        for(std::set< std::pair<int,int> >::iterator iter=temp->begin();iter!=temp->end();++iter){
            float a=calculateAngle(x,y,(*iter).first, (*iter).second);
            if(a>=alpha1 && a<=alpha2){
               result.insert(*iter);
             }
        }
    }
    return result;
}

1 个答案:

答案 0 :(得分:2)

为什么不在弧上返回点,然后使用lineto函数填充弧?

弧上的点应该可以用数学方法计算,这样可以避免不必要的计算。

或者,绘制弧和2个半径并使用Flood Fill Algorithm填充它,谢谢@ user814628