【发布时间】:2015-07-07 03:22:43
【问题描述】:
我正在尝试生成一组点,我将连接这些点来制作多边形。必须以系统的方式生成数据。
我试图通过随机推导径向坐标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。 -
我试过了,但还是否定的
-
您正在使用基于随机点的(整数截断的)半径,并以 (0, 0) 为中心绘制一个圆,因此您当然会有负值。
-
我建议你学习unit circle