Мегаобучалка Главная | О нас | Обратная связь


Напишите программу мерцающего звездного неба



2019-07-03 213 Обсуждений (0)
Напишите программу мерцающего звездного неба 0.00 из 5.00 0 оценок




С помощью точек

Решение :

 

#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);

}

 

Результат:




2019-07-03 213 Обсуждений (0)
Напишите программу мерцающего звездного неба 0.00 из 5.00 0 оценок









Обсуждение в статье: Напишите программу мерцающего звездного неба

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (213)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)