я бы хотел перебирать пиксели вдоль растеризованной дуги окружности, учитывая его радиус, начальный и конечный углы в радианах, например:
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";
});
Есть несколько уловов:
radius
также дается как целое числоradius
и дуга радиуса radius-1
На картинке ниже:
radius
, radius-1
,Я думаю Алгоритм круга Брезенхэма не относится напрямую к этой проблеме из-за ограничений по углу и порядка посещения.
Я полагаю, что в stackoverflow это наиболее тесно связанный вопрос:
Наконец, OpenCV имеет нечто похожее / родственное по духу, но только для строк:
Взгляни на cvLinearPolar()
.
Он отображает изображение из системы координат x, y в полярную. Результирующее изображение представляет собой строки -> угол и столбцы -> радиус. Ваш растр в этой точке будет цикличным порядком столбцов строк без специального функционального растеризации.
Это означает, что каждый ряд dtheta = 2*Pi/(rowNum)
поэтому ваша дуга будет
быть startAngle = angle1/dtheta
и аналогично endAngle = angle2/dtheta
,
Точно так же ваш радиус расчета drad = maxRad/(columnNum)
,
Итак, чтобы получить вашу дугу от полярного изображения:
for(int i = maxRad; i > 0; i--) // start at longest radius spiral in
{
for(int j = startAngle; j < endAngle;j++) angle
{
// do action on polarImage[i,j];
}
}
Других решений пока нет …