Учитывая две (очень упрощенным) классов:Перебор всех (I, J) -элементов в круге
class Rectangle {
public:
int iL,jL; // lower left point of rectangle
int width, length; // width: in i-direction, length: in j-direction
};
class Circle {
public:
int iC,jC; // center-point of circle
int radius;
};
Если я хочу, чтобы перебрать все элементы в Rectangle
, я могу просто сделать это:
for (int i = iL; i < iL-width; i--)
for (int j = jL; j < jL+length; j++)
doSomething();
Моя проблема заключается в реализации смарт способ перебора всех элементов в Circle
. Мое текущее решение выглядит следующим образом:
for (int i = iC-radius; i <= iC+radius; i++)
for (int j = jC-radius; j <= jC+radius; j++)
if (sqrt(pow(i-iC,2)+pow(j-jC,2)) <= r) // checking if (i,j) lies within the circle (or its boundary)
doSomething();
Однако для получения radius
большой мое текущее решение является очень дорогим по времени (так как я прикасаюсь много элементов, которые не находятся в Circle
и так как я всегда нужно оценивать pow
) , Можете ли вы подумать о более интеллектуальном и эффективном способе итерации по всем Circle
-элементам?
[полярная система координат] (https://en.wikipedia.org/wiki/ Polar_coordinate_system) – Drop
Итак, у меня есть дискретная 2D-форма (с i, j-точками), где лежат несколько кругов и прямоугольников. Если я использую полярные координаты, у меня возникает такая же проблема: как я должен перебирать угол \ phi? Мне нужно. (psuedocode :) 'for (double phi = 0; phi <360; phi ++)', и это невозможно. – Kapa11
http://stackoverflow.com/a/7227057/6313992 –