2013-05-10 5 views
1

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

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. Приказ не имеет значения.

ответ

2

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

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; 
} 

Output (округленно):

(1 , 0) 
(0 , 1) 
(-1 , 0) 
(0 , -1) 
+0

Что '1,0 - i' сделать различные решения для Pubby в? Он просто заставляет «i» удваивать, но не вычитает его из «1». Более того, есть ли содержательное имя для вас, переменная 'a'? Что он представляет? – danijar

+1

'1.0 - i' делает порядок результата, как вы писали (однако вы сказали, что это не имеет значения). Имя 'a' не является особенным, я использовал' a', чтобы сделать мой код более удобочитаемым (на мой взгляд). – deepmax

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);