gpt4 book ai didi

c++ - 使用随机点绘制多边形?

转载 作者:行者123 更新时间:2023-11-28 06:11:04 24 4
gpt4 key购买 nike

我正在尝试生成一组点,我将连接这些点以制作多边形。必须以系统的方式生成数据。

我正在尝试通过随机导出径向坐标 r 并均匀递增角坐标 theta 来生成点集,这样所有点都按顺序链接而不相互交叉.我遵循了正确的公式并增加了角度,但由于 sincos,数据结果为负。我想知道我这样做是否正确。

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;

}

最佳答案

sincos 返回以 (0, 0) 为中心的单位圆上的点,正如 paddy 指出的那样。要在您自己的多边形上的点中没有负值,您需要移动该圆的原点。您已经在使用 r * sin(theta) 更改它的大小;您可以通过以下方式完成最少的翻译:

x = r * cos(theta) + r;
y = r * cos(theta) + r;

当我对您的程序进行此更改时,我不会再得到负值。

话虽如此,我怀疑您没有按照预期的方式增加 theta。如果您尝试将圆分成 10 个相等的角,则 theta 应该是 floatdouble 并像这样递增:

theta += (2 * M_PI / 10);

theta 以弧度为单位,因此 2 * M_PI 绕单位圆一周。

关于c++ - 使用随机点绘制多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com