【问题标题】:How can I use a function to generate curves in OpenGL如何使用函数在 OpenGL 中生成曲线
【发布时间】:2025-12-06 10:10:01
【问题描述】:

我想知道如何使用这些函数在 OpenGL 中生成曲线:

x(t) = sin(t) + 1/2 sin(5t) + 1/4 cos(2,3t)

y(t) = cos(t) + 1/2 cos(5t) + 1/4 sin(2,3t)

这是一个大学练习,我用圆圈做了一些事情,但我遇到了曲线问题。

我没有掌握构建曲线的方法,我试图构建一个代码来生成一个简单的曲线来看看它是如何工作的,但是它完全错误,因为它产生了一些非常奇怪的东西。我想看一个带有此功能的简单曲线示例,以了解我必须如何开始像打印一样构建绘图。

测试代码:

void exerciseTwo(){
 write("Exercise Two", -5, 18);
 
 float x = 0, y = 0, t =0;
 
 glPushMatrix();
     glBegin(GL_LINE_STRIP);
     for(t = -10.0; t < 10.0; t += 0.1){
           x = sin(t) + ((1/2) * sin(5 * t)) + ((1/4) * cos(2.3 * t));
          glVertex2f(x, t);
     }       
     
     for(t = -10.0; t < 10.0; t += 0.1){
           y = cos(t) + ((1/2) * cos(5 * t)) + ((1/4) * sin(2.3 * t));
           glVertex2f(t, y);
     }
     
     glEnd();
 glPopMatrix();
 
 write("Press 0 (zero) to come back.", -10, -18);
}

我的方式是否正确?

【问题讨论】:

  • 您是否尝试过使用科学计算器,看看您从函数中得到的曲线是什么样子的?就像做一个循环来改变(X,T)坐标中每个像素的像素颜色一样简单。
  • 您还可以将其绘制在电子表格中,例如 OpenOffice Calc 或 Microsoft Excel。此外,尝试从 -10*pi 到 10*pi 而不是 -10 到 10。您可以根据需要选择增量大小,但这将涵盖整个行为范围。

标签: c opengl math dev-c++ curves


【解决方案1】:

已编辑答案:您应该将曲线的 x 和 y 部分表示为 1 个顶点,否则您会得到不相关的结果。这是更正:

glPushMatrix();
     glBegin(GL_LINE_STRIP);
     for(t = -10.0; t < 10.0; t += 0.1){
           x = sin(t) + ((1/2) * sin(5 * t)) + ((1/4) * cos(2.3 * t));
           y = cos(t) + ((1/2) * cos(5 * t)) + ((1/4) * sin(2.3 * t));
           glVertex2f(x, y);
     }         
     glEnd();
 glPopMatrix();

注意:正弦余弦函数以弧度类型不是度数为参数。如果结果仍然不是您想要的,请考虑此警告。

【讨论】:

  • 你能看到我的问题的“测试代码”吗?我按照您的提示更新了代码,但代码不像我发布的照片​​那样绘制。我试图将代码只放在一个(正如你告诉我的)和两个(就像我现在发布的那样)中,但它会产生一些非常不同的东西。谢谢你的回答。
  • 我尝试过你发布的这种方式,它生成了一个圆,所以我将度数转换为半径( (angleDegrees * M_PI / 180.0) ),它仍然出错 =;/ 我需要问我的老师如何做到这一点...非常感谢您的帮助。