课程实验
试验一 画五角星
五角星(1) 只有一个五角星在屏幕上变换
#include<GL/glut.h>
#include<math.h>
#include <time.h>
const GLfloat PI = 3.1415926536f ;
float x = 0.0f , y = 0.0f ;
float r = 0.8f , p = 0.0 ;
void grawstar(float x, float y, float r, float p) {
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(3 );
glBegin(GL_LINE_LOOP);
glColor3f(1.0f , 0.0f , 0.0f );
int i;
float rr;
float j;
j = p * 2 * PI + PI / 10 ;
rr = r * sin (PI / 10 ) / sin (7 * PI / 10 );
for (i = 0 ; i < 5 ; i++) {
glVertex2f(x + r * cos (j), y + r * sin (j));
glVertex2f(x + rr * cos (j + PI / 5 ), y + rr * sin (j + PI / 5 ));
j = j + 2.0 * PI / 5.0 ;
}
glEnd();
glFlush();
}
void change() {
int i;
srand(time(NULL));
i = rand() % 200 ;
x = i / 100.0f + -1 ;
i = rand() % 200 ;
y = i / 100.0f + -1 ;
i = rand() % 100 ;
r = i / 100.0f ;
i = rand() % 100 ;
p = i / 100.0f ;
grawstar(x, y, r, p);
}
void basicshape2(void )
{
glClearColor(0.0 , 1.0 , 0.0 , 1 );
glClear(GL_COLOR_BUFFER_BIT);
grawstar(x, y, r, p);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0 , 0 );
glutInitWindowSize(1000 , 1000 );
glutCreateWindow("Baisc Shape2" );
glutDisplayFunc(basicshape2);
glutIdleFunc(change);
glutMainLoop();
return 0 ;
}
五角星(2) 多个不同的五角星出现在屏幕上
#include<GL/glut.h>
#include<math.h>
#include <time.h>
const GLfloat PI = 3.1415926536f ;
float x = 0.0f , y = 0.0f ;
float r = 0.8f , p = 0.0 ;
float r1, g1, b1;
void grawstar(float x, float y, float r, float p, float r1, float g1, float b1) {
glLineWidth(3 );
glColor3f(r1, g1, b1);
glBegin(GL_LINE_LOOP);
int i;
float rr;
float j;
j = p * 2 * PI + PI / 10 ;
rr = r * sin (PI / 10 ) / sin (7 * PI / 10 );
for (i = 0 ; i < 5 ; i++) {
glVertex2f(x + r * cos (j), y + r * sin (j));
glVertex2f(x + rr * cos (j + PI / 5 ), y + rr * sin (j + PI / 5 ));
j = j + 2.0 * PI / 5.0 ;
}
glEnd();
glFinish();
}
void change() {
glClearColor(0.0 , 1.0 , 0.0 , 1 );
glClear(GL_COLOR_BUFFER_BIT);
int i;
srand(time(NULL));
for (int j = 0 ; j < 10 ; j++) {
i = rand() % 200 ;
x = i / 100.0f + -1 ;
i = rand() % 200 ;
y = i / 100.0f + -1 ;
i = rand() % 100 ;
r = i / 100.0f ;
i = rand() % 100 ;
p = i / 100.0f ;
i = rand() % 100 ;
r1 = i / 100.0f ;
i = rand() % 100 ;
g1 = i / 100.0f ;
i = rand() % 100 ;
b1 = i / 100.0f ;
grawstar(x, y, r, p, r1, g1, b1);
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0 , 0 );
glutInitWindowSize(1000 , 1000 );
glutCreateWindow("wujiaoxing" );
glutDisplayFunc(change);
glutMainLoop();
return 0 ;
}
srand(time(NULL)); 如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。 srand和rand()配合使