C++;写得不好的函数,don';I don’我不知道如何简化它[初学者] 我对C++非常陌生,现在我正在UNI学习它。

C++;写得不好的函数,don';I don’我不知道如何简化它[初学者] 我对C++非常陌生,现在我正在UNI学习它。,c++,function,opengl,methods,C++,Function,Opengl,Methods,我开始胡乱使用openGL,目前我正在制作不同的形状和对象以显示在屏幕上,除了一个功能外,它运行得非常好: void Shape::drawRandom(void) { glEnable(GL_POINT_SMOOTH); glPointSize(5.0); glColor3ub(255, 0, 0); glBegin(GL_POINTS); //v1 float x1 = rand_FloatRange(-0.75, 0.75); float y2 = rand_FloatRange(-0

我开始胡乱使用openGL,目前我正在制作不同的形状和对象以显示在屏幕上,除了一个功能外,它运行得非常好:

void Shape::drawRandom(void) {

glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255, 0, 0);
glBegin(GL_POINTS);

//v1
float x1 = rand_FloatRange(-0.75, 0.75);
float y2 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x1, y2);

//v2
float x3 = rand_FloatRange(-0.75, 0.75);
float y4 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x3, y4);

//v3
float x5 = rand_FloatRange(-0.75, 0.75);
float y6 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x5, y6);

//v4
float x7 = rand_FloatRange(-0.75, 0.75);
float y8 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x7, y8);

glEnd();
}
基本上,该函数获取两个随机浮点值(在不同的函数中生成),并将它们设置为顶点(点)的x任意y值,并显示它们

基本上用随机坐标在屏幕上画4个点

但我觉得这是非常冗余的,每对坐标的代码几乎相同,可能可以简化


我试着用一个循环来做,但是我失败了,我很好奇现在如何使这个更简单和更少冗余的

< P>你可以在这里填空for for循环精确地运行四次吗?< /P>
void Shape::drawRandom(void) {

  glEnable(GL_POINT_SMOOTH);
  glPointSize(5.0);
  glColor3ub(255, 0, 0);
  glBegin(GL_POINTS);

 for(__________________) {
    float x = rand_FloatRange(-0.75, 0.75);
    float y = rand_FloatRange(-0.75, 0.75);
    glVertex2f(x, y);
 }

 glEnd();
}

也许是这样的

void Shape::drawRandom(void)
{
    glEnable(GL_POINT_SMOOTH);
    glPointSize(5.0);
    glColor3ub(255, 0, 0);
    glBegin(GL_POINTS);

    for (int i = 0; i < 4; i++)
        glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75));

    glEnd();
}
void形状::drawRandom(void)
{
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255,0,0);
glBegin(总分);
对于(int i=0;i<4;i++)
glVertex2f(rand_FloatRange(-0.75,0.75),rand_FloatRange(-0.75,0.75));
格伦德();
}

我想到的第一件事就是重用变量。与其每次声明两个变量,不如每次重写它们。然而,还有更好的办法。您可以在对
glVertex2f(x,y)
的调用中直接使用
rand\u FloatRange(-0.75,0.75)
,使其如下所示

glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75))
函数的计算方法与数学函数非常相似。我的意思是,在这种情况下,首先计算括号内的内容。这里调用的是
rand\u FloatRange(a,b)
,该函数返回它应该返回的值。这两个调用在传递之前都会发生。然后将这些函数返回的值作为参数传递给
glVertex2f(x,y)
,其中x和y是返回的数字。这样就完全不需要将值存储在变量中,因为它们可以立即使用。现在,您提到的for循环也很简单

for (int i = 0; i < 4; i++) {
    glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75));
}
for(int i=0;i<4;i++){
glVertex2f(rand_FloatRange(-0.75,0.75),rand_FloatRange(-0.75,0.75));
}

<>这在C++世界中非常普遍,实际上是编程世界。如果您想创建更多或更少的随机点,只需将循环控制变量从4更改为您想要的点数。

我想看看您在循环中尝试了什么,这样我们可以帮助您更好地理解它们。因为循环是最好的方法,而你已经找到了那部分。哦,我知道我做错了什么。出于某种原因,我把格伦也包括在内;在循环中,这就是为什么我看不到屏幕上出现任何点的原因。现在它工作得很好,非常感谢@谢谢你接受我的回答。祝你有美好的一天!