2
欲迭代在沿着光柵化圓弧像素的像素,賦予其半徑,開始和結束角度以弧度爲單位,例如:遍歷沿光柵化圓弧
template<typename Functor>
void arc(float startRadians, float endRadians, int radius, Functor f);
要等中使用:
arc(0.f, M_PI, 10, [](int x, int y) {
std::cout << "got: " << x << " " << y << "\n";
});
有幾個漁獲:
- 像素具有整數coordi納茨
radius
也給出爲一個整數- 的光柵化的電弧有效地是在半徑
radius
的圓弧和半徑radius-1
的圓弧在下面的畫面之間的扇區的每個像素:
- 藍色像素已被訪問,紅色像素是下一個要訪問的
- 圓弧由開始/結束角定義的兩條徑向線限定,並且兩弧之間的扇區
radius
,radius-1
。 - 最後,如果要繪製每個半徑爲0到100的圓弧,角度爲0到2 * PI,那麼我們將得到半徑爲100的填充圓盤/圓和沒有像素會被訪問兩次。
我認爲Bresenham's circle algorithm不直接適用於這個問題,因爲角度約束和訪問順序。
在計算器,我相信這是最密切相關的問題:
最後,OpenCV的類似的精神相關的東西/,但僅限於行:
呃,不,布氏算法正是你想要的...你只需要邏輯添加到基本的算法:跳過8象限優化(按照您希望的順序分別繪製每個象限的子功能),並觀察其重要象限內的進/出角度。另一種選擇是直接使用浮點計算。 –
哦,所以你的想法是使用標準的Bresenham生成所有點,只是濾除掉所需角度/象限的那些點? Bresenham是否具有訪問所有像素(在每個整數半徑被光柵化時填充光盤)而不是兩次訪問像素的所需屬性? –
不,僅生成象限所需的部分(當y/x或x/y達到tan(角度)限制時停止) – MBo