Напишите программу мерцающего звездного неба
С помощью точек Решение :
#include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h> #include <math.h>
GLint windW, windH;
void CALLBACK Reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-15,15,-15,15); glMatrixMode(GL_MODELVIEW); }
void CALLBACK Draw(void) { glClearColor(1.0,1.0,1.0,1); glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES); glColor3ub(190,190,190); for (int i=-4; i<=4; i++) { glVertex2f(float(i), -6);//явное преобразование типа glVertex2f(float(i), 15); } for (i=-6; i<=15; i++) { glVertex2f(-4, float(i)); glVertex2f(4, float(i)); } glEnd();
glColor3ub(0,0,0); glBegin(GL_LINES); glVertex2f (-5, 0); glVertex2f(5, 0); glVertex2f(0,16); glVertex2f(0,-7); glEnd();
glPointSize(2); glBegin(GL_POINTS); glColor3ub(0,0,255); int n; double a,b,dx,x,y; a=-1.415; b=1.5; n=20; dx=(b-a)/(n-1); x=a; y=0; for (i=1; i<=n; i++) { y=float(tan(x)+5*cos(x));
glVertex2d (x, y); x=x+dx; } glEnd();
glFinish(); auxSwapBuffers(); }
void main(int argc, char **argv) { windW = 800; windH = 800; auxInitPosition(100, 100, windW, windH); auxInitDisplayMode(AUX_RGB | AUX_DOUBLE); auxInitWindow("v11_01_1"); glTranslated(0,-4,0); auxReshapeFunc(Reshape); auxMainLoop(Draw); } Результат:
С помощью линий Решение : #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h> #include <math.h>
GLint windW, windH;
void CALLBACK Reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-15,15,-15,15); glMatrixMode(GL_MODELVIEW); }
void CALLBACK Draw(void) { glClearColor(1.0,1.0,1.0,1); glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES); glColor3ub(190,190,190); for (int i=-4; i<=4; i++) { glVertex2f(float(i), -6);//явное преобразование типа glVertex2f(float(i), 15); } for (i=-6; i<=15; i++) { glVertex2f(-4, float(i)); glVertex2f(4, float(i)); } glEnd();
glColor3ub(0,0,0); glBegin(GL_LINES); glVertex2f (-5, 0); glVertex2f(5, 0); glVertex2f(0,16); glVertex2f(0,-7); glEnd();
glBegin(GL_LINE_STRIP); glColor3ub(0,0,255); int n; double a,b,dx,x,y; a=-1.415; b=1.5; n=100; dx=(b-a)/(n-1); x=a; y=0; for (i=1; i<=n; i++) { y=float(tan(x)+5*cos(x));
glVertex2d (x, y); x=x+dx; } glEnd();
glFinish(); auxSwapBuffers(); }
void main(int argc, char **argv) { windW = 800; windH = 800; auxInitPosition(100, 100, windW, windH); auxInitDisplayMode(AUX_RGB | AUX_DOUBLE); auxInitWindow("v11_01_1"); glTranslated(0,-4,0); auxReshapeFunc(Reshape); auxMainLoop(Draw); }
Результат:
Нарисуйте каркас призмы, в основании которой лежит правильный 14-угольник
Решение :
//v11_02 #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> #include <math.h>
void CALLBACK resize (int width, int height)
{ glViewport (0,0,width, height); glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho(-15,15,-10,10, -10,20); gluLookAt(1,-1,1, 0,0,0, 0,0,1); glMatrixMode(GL_MODELVIEW); }
void CALLBACK display (void)
{ GLUquadricObj *quadObj; quadObj = gluNewQuadric();
glClearColor(1.0,1.0,1.0,1); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3d(0,0,1); // каркас gluQuadricDrawStyle(quadObj, GLU_SILHOUETTE); //призма в основании которой лежит правильный 14-угольник gluCylinder(quadObj, 2, 2, 5, 14, 14);
glBegin(GL_LINES); glColor3ub(0, 0, 0); glVertex2f(6, 0); glVertex2f(-6, 0); glVertex2f(0, 6); glVertex2f(0, -6); glVertex3f(0, 0, 0); glVertex3f(0, 0, 8); for (int i=-5; i<=5; i++) { if (i!=0) { glColor3ub(190,190,190); glVertex2f(float(i), -5); glVertex2f(float(i), 5); } } for (i=-5; i<=5; i++) { if (i!=0) { glColor3ub(190,190,190); glVertex2f(-5, float(i)); glVertex2f(5, float(i)); } } glEnd();
glFinish(); auxSwapBuffers(); }
void main ()
{ auxInitPosition (100,100,800,600); auxInitDisplayMode (AUX_RGB | AUX_DEPTH | AUX_DOUBLE); auxInitWindow ("v11_02"); glScaled(1.5, 1.5, 1.5); glTranslated(0,0,-1); auxIdleFunc (display); auxReshapeFunc(resize); glEnable (GL_DEPTH_TEST); auxMainLoop(display); }
Результат: 3. Напишите программу вывода графика функции x =2* sin ( z )* cos ( y )-3* tg ( y ) используя алгоритм плавающего горизонта. Модифицируйте программу таким образом, чтобы поверхность состояла из четырехугольников
Решение : #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h>
#include <math.h> // запретить вывод предупреждений о преобразовании данных
#pragma warning(disable: 4305) // MIPS #pragma warning(disable: 4244) // MIPS
GLint windW, windH;
void CALLBACK Reshape(int width, int height) { windW = (GLint)width; windH = (GLint)height; }
int alpha=0, beta=0;
void CALLBACK Key_LEFT(void) { alpha -= 5; }
void CALLBACK Key_RIGHT(void) { alpha += 5; }
void CALLBACK Key_UP(void) { beta += 5; }
void CALLBACK Key_DOWN(void) { beta -= 5; }
void CALLBACK InitViewport(int x, int y, int width, int height) { glViewport(x, y, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-windW,windW, -windH,windH, windH/1000,windH*1000); gluLookAt(0,0,windH, 0,0,0, 1,0,0); glMatrixMode(GL_MODELVIEW); }
void CALLBACK Draw(void) { float x,y,z; float d=10; InitViewport(0,0, windW, windH);
glColor3d(0,1,0); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
for (y=-windH/1.3; y<=windH/1.3; y+=10) {glBegin(GL_QUADS); for (z=-windW/1.3; z<=windW/1.3; z+=10) {
x=2*sin(z)*cos(y)-3*tan(y); glVertex3f(x,y,z); glVertex3f(x,y+d,z);
x=2*sin(z+d)*cos(y+d)-3*tan(y+d); glVertex3f(x,y+d,z+d); glVertex3f(x,y,z+d);
}
glEnd(); } glFinish();
}
void CALLBACK Turn(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix(); glRotated(alpha, 0,1,0); glRotated(beta, -1,0,0); Draw(); glPopMatrix();
auxSwapBuffers(); glFinish(); }
void main(int argc, char **argv) { windW = 800; windH = 600;
auxInitPosition(0, 0, windW, windH); auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE);
if(auxInitWindow("v11_03") == GL_FALSE) { auxQuit(); }
auxExposeFunc((AUXEXPOSEPROC)Reshape); auxReshapeFunc((AUXRESHAPEPROC)Reshape); auxIdleFunc(Turn);
auxKeyFunc(AUX_LEFT, Key_LEFT); auxKeyFunc(AUX_RIGHT, Key_RIGHT); auxKeyFunc(AUX_UP, Key_UP); auxKeyFunc(AUX_DOWN, Key_DOWN);
auxMainLoop(Turn); }
Результат:
4. Напишите программу вывода вращающего тора относительно своей оси x , с одновременным движением по следующей траектории z = sin ( y )
Решение :
//v11_04 #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> #include <math.h>
int flag=1;
void CALLBACK resize (int width, int height)
{ glViewport (0,0,width, height); glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho(-15,15,-10,10, -10,20); gluLookAt(1,-1,1, 0,0,0, 0,0,1); glMatrixMode(GL_MODELVIEW); }
void CALLBACK display (void)
{ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(0,1,0);
float pos[4]={0,7.5,7.5,1}; static double time=0; float y,z; y=0;
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos);
glPushMatrix();
y=float(time/100); z=float(sin(y)); // float(); преобразование типа //движением по следующей траектории z=sin(y) glTranslated(0,y,z); //вращающего тора относительно оси x glRotated(time,1,0,0);
if (y>11 && flag==1) { flag=2; }
if (y<-4 && flag==2) { flag=1; }
if (flag==2) { time--; } else { time++; }
auxSolidTorus(0.15, 0.5);
glPopMatrix();
// система координат XYZ glBegin(GL_LINES); glColor3ub(255, 0, 0); glVertex3f(5, 0, 0); glVertex3f(-5, 0, 0); // х красный glColor3ub(0, 255, 0); glVertex3f(0, 11, 0); glVertex3f(0, -4, 0); // y зеленый glColor3ub(0, 0, 255); glVertex3f(0, 0, 0); glVertex3f(0, 0, 5); // z синий glEnd();
glFinish(); auxSwapBuffers(); }
void main ()
{ auxInitPosition (100,100,800,600); auxInitDisplayMode (AUX_RGB | AUX_DEPTH | AUX_DOUBLE); auxInitWindow ("v11_04"); glScaled(1.5, 1.5, 1.5); glTranslated(0,-3,0); auxIdleFunc (display); auxReshapeFunc(resize); glEnable (GL_DEPTH_TEST); glEnable (GL_COLOR_MATERIAL); auxMainLoop(display); }
Результат: Напишите программу мерцающего звездного неба
Решение : #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h>
#include<time.h>
#include <stdio.h> #include <iostream.h> #include <conio.h> #include <math.h>
int t_sec() // считывание секунд с системных часов { struct tm *newtime; time_t aclock;
time(&aclock); newtime = localtime(&aclock); asctime(newtime);
int s=newtime->tm_sec; return s; } void CALLBACK resize (int width, int height) { glViewport (0,0,width, height); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-100,100,-100,100);
glMatrixMode(GL_MODELVIEW);
}
void CALLBACK Draw (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
int c, x, y, p;
srand(t_sec()); //задание стартовой точки //для генерации случайных чисел
for(int i=0; i<1000; i++) { c=rand()%255; //генерация случайных чисел от 0 до 255 x=rand()%200; //генерация случайных чисел от 0 до 200 y=rand()%200; //генерация случайных чисел от 0 до 200 p=rand()%3;
glPointSize(p); glBegin(GL_POINTS); glColor3ub(c,c,c); glVertex2d(x,y); glEnd(); }
auxSwapBuffers(); }
void main () {
auxInitPosition (100,100,800,800); auxInitDisplayMode (AUX_RGB | AUX_DEPTH | AUX_DOUBLE); auxInitWindow ("v11_06"); glTranslated(-100,-100,0); auxIdleFunc (Draw); auxReshapeFunc (resize); glEnable (GL_DEPTH_TEST); glEnable (GL_COLOR_MATERIAL); auxMainLoop(Draw); }
Результат:
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (213)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |