円の弧だけを塗りつぶすより良い方法はありますか? 中心、半径、最小および最大角度 (円弧角度) の関数座標に渡しました。現時点では、円 (x、y、r) 内のすべてのピクセルを返し、角度間の点の角度が結果に挿入されるかどうかを確認します。//lineTo (bresenham) は、2 つのピクセル間のポイントを返す関数です。
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;
}