Я пытаюсь создать набор точек, которые я буду подключать для создания многоугольника. Данные должны генерироваться систематически.Рисование полигонов с использованием случайных точек?
Я пытаюсь сгенерировать точку с помощью случайного вывода радиальной координаты r
и равномерно увеличивающей угловой координаты theta
так, чтобы все точки были упорядочены без пересечения друг с другом. Я следовал правильным формулам, и я увеличиваю угол, но данные становятся отрицательными из-за sin
и cos
. Я хотел знать, правильно ли я делаю это.
struct Point2D {
int x;
int y;
};
Point2D poly[10];
int N = 80;
int x = (rand() % N + 1) * 5;
int y = (rand() % N + 1) * 5;
int r = sqrt(x*x + y*y);
int theta = int(atan ((float)y/(float)x) * 180/PI);
cout << "x " << x << " y " << y << " r " << r << " theta " << theta << endl;
for (int i = 0; i < 10; i++) {
Point2D p;
p.x = x;
p.y = y;
poly[i] = p;
theta += 20;
x = r * sin(theta);
y = r * cos(theta);
cout << "x " << x << " y " << y << endl;
}
'sin' и' cos' требуют радианов как двойной. Вы даете ему степень как int. – paddy
Я попытался, но его все еще отрицательный – Pete
Вы используете (целочисленный усеченный) радиус на основе случайной точки и рисуете окружность с центром (0, 0), поэтому, конечно, у вас будут отрицательные значения. – paddy