Как получить точки выборки, вращая направление в цикле?

Мне нужно перебрать определенное количество точек отбора проб. Эти точки отбора являются нормализованными векторами, представляющими направления. Они должны быть рассчитаны в коде. Начиная с прямого вектора 1, 0Я хочу вращаться вокруг источника, чтобы придумать заданное количество направлений.

for(int i = 0; i < number_of_sampling_points; ++i)
{
// get direction vector based on i and number_of_sampling_points
// ...
}

Например, с number_of_sampling_points является 4 внутри цикла я хочу получить пары значений 1, 0, 0, 1, -1, 0, 0, -1, Порядок не имеет значения.

1

Решение

Попробуй это:

const double PI = 3.14159265358979323846;
const int number_of_sampling_points = 4;
for (int i = 0; i < number_of_sampling_points; ++i)
{
const double a = PI * 2 * (1.0 - i) / number_of_sampling_points;

double x = sin(a);
double y = cos(a);

cout << "(" << x << " , " << y << ")" << endl;
}

Выход (округлено):

(1 , 0)
(0 , 1)
(-1 , 0)
(0 , -1)
2

Другие решения

Используйте триг:

double x = std::cos(pi * 2 * (double)i / (double)number_of_sampling_points);
double y = std::sin(pi * 2 * (double)i / (double)number_of_sampling_points);
2

По вопросам рекламы [email protected]