Advertisement
Jonas_3k

AV2_CG

Jun 3rd, 2021
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <GL/glut.h>
  3.  
  4. int g_eixo = 1;
  5. int g_funcao = 0;
  6. float R = 1, G = 0, B = 0;
  7.  
  8. void init(){
  9.     g_eixo = 1;
  10.     g_funcao = 0;
  11. }
  12.  
  13. void F01() {
  14.     float x, y;
  15.     glColor3f(R, G, B);
  16.     glBegin(GL_POINTS);
  17.     for (x = -5; x <= 5; x = x + 0.01) {
  18.         y = x + 1;
  19.         glVertex2f(x, y);
  20.     }
  21.     glEnd();
  22. }
  23.  
  24. void F02() {
  25.     float x, y;
  26.     glColor3f(R, G, B);
  27.     glBegin(GL_POINTS);
  28.     for (x = -5; x <= 5; x = x + 0.001) {
  29.         y = x * x - 4;
  30.         glVertex2f(x, y);
  31.     }
  32.     glEnd();
  33. }
  34.  
  35. void F03() {
  36.     float x, y;
  37.     glColor3f(R, G, B);
  38.     glBegin(GL_POINTS);
  39.     for (x = -5; x <= 5; x+=0.0001) {
  40.         y = (x * x * x) + 3* x * x;
  41.         glVertex2f(x, y);
  42.     }
  43.     glEnd();
  44. }
  45.  
  46.  
  47. void Eixo() {
  48.     if (g_eixo == 1) {
  49.         glLineWidth(1);
  50.         glColor3f(0.7, 0.7, 0.7);
  51.         glBegin(GL_LINES);
  52.         for (int i = -5; i <= 5; i++) {
  53.             glVertex2f(-5, i);
  54.             glVertex2f(5, i);
  55.             glVertex2f(i, -5);
  56.             glVertex2f(i, 5);
  57.         }
  58.         glEnd();
  59.     }
  60.     glColor3f(0, 0, 0);
  61.     glLineWidth(2);
  62.     glBegin(GL_LINES);
  63.     //Eixo x
  64.     glVertex2f(-5, 0);
  65.     glVertex2f(5, 0);
  66.     //Eixo y
  67.     glVertex2f(0, -5);
  68.     glVertex2f(0, 5);
  69.     glEnd();
  70. }
  71.  
  72. void layout() {
  73.     //Eixosg
  74.     glLineWidth(1);
  75.     glBegin(GL_LINES);
  76.     //Secundários
  77.     glColor3f(0.7, 0.7, 0.7);
  78.     for (float i = 3; i <= 5; i = i + 0.2) {
  79.         glVertex2f(5, i);
  80.         glVertex2f(7, i);
  81.         glVertex2f(i + 2, 3);
  82.         glVertex2f(i + 2, 5);
  83.     }
  84.     //Eixos x e y
  85.     glColor3f(0, 0, 0);
  86.     glVertex2f(5, 4);
  87.     glVertex2f(7, 4);
  88.     glVertex2f(6, 3);
  89.     glVertex2f(6, 5);
  90.     glEnd();
  91.     //Função do 1º Grau
  92.     glLineWidth(2);
  93.     glColor3f(1, 0, 0);
  94.     glBegin(GL_LINES);
  95.     glVertex2f(5, 1);
  96.     glVertex2f(7, 3);
  97.     glEnd();
  98.     glBegin(GL_POINTS);
  99.     //Função do 2º Grau
  100.     for (float x = -1; x <= 1; x = x + 0.001) glVertex2f(x + 6, 2 * x * x - 1);
  101.     //Função do 3º Grau
  102.     for (float x = -1; x <= 1; x = x + 0.001) glVertex2f(x + 6, 2 * x * x * x - 2 * x - 2);
  103.     glEnd();
  104.     //Cor
  105.     glBegin(GL_QUADS);
  106.     glColor3f(1, 0, 0);
  107.     glVertex2f(5, -3);
  108.     glColor3f(0, 1, 0);
  109.     glVertex2f(5, -5);
  110.     glColor3f(0, 0, 1);
  111.     glVertex2f(7, -5);
  112.     glColor3f(0, 0, 0);
  113.     glVertex2f(7, -3);
  114.     glEnd();
  115.     //Contorno da Tela
  116.     glLineWidth(5);
  117.     glColor3f(0, 0, 0);
  118.     glBegin(GL_LINE_LOOP);
  119.     glVertex2f(-5, -5);
  120.     glVertex2f(-5, 5);
  121.     glVertex2f(7, 5);
  122.     glVertex2f(7, -5);
  123.     glEnd();
  124.     //Linhas de Grade
  125.     glBegin(GL_LINES);
  126.     glVertex2f(5, -5);
  127.     glVertex2f(5, 5);
  128.     for (int i = -3; i <= 3; i = i + 2) {
  129.         glVertex2f(5, i);
  130.         glVertex2f(7, i);
  131.     }
  132.     glEnd();
  133. }
  134.  
  135. void redesenha() {
  136.     glClearColor(1, 1, 1, 0);
  137.     glClear(GL_COLOR_BUFFER_BIT);
  138.     if (g_eixo != 0) Eixo();
  139.     switch(g_funcao) {
  140.         case 1: F01(); break;
  141.         case 2: F02(); break;
  142.         case 3: F03(); break;
  143.     }
  144.  
  145.     layout();
  146.     glFlush();
  147. }
  148.  
  149. void Teclado(unsigned char key, int x, int y) {
  150.     switch (key) {
  151.         case 'E':
  152.         case 'e':
  153.             g_eixo++;
  154.             if (g_eixo == 3) g_eixo = 0;
  155.             break;
  156.         case '0': init(); break;
  157.         case '1':
  158.             g_funcao = 1;
  159.             break;
  160.         case '2':
  161.             g_funcao = 2;
  162.             break;
  163.         case '3':
  164.             g_funcao = 3;
  165.             break;
  166.     }
  167.     redesenha();
  168. }
  169.  
  170. void Mouse(int button, int state, int x, int y) {
  171.  
  172.     if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
  173.         if (x > 500 && x < 600) {
  174.             if (y < 100) g_eixo = (g_eixo==3) ? 0 : (g_eixo+1);
  175.             else if (y < 200) g_funcao = 1;
  176.             else if (y < 300) g_funcao = 2;
  177.             else if (y < 400) g_funcao = 3;
  178.             else if (y < 500) g_funcao = 1; //colocar a ultima função aqui
  179.         }
  180.     }
  181.  
  182.     redesenha();
  183. }
  184. int main(int argc, char ** argv) {
  185.     glutInit( & argc, argv);
  186.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  187.     glutInitWindowSize(600, 500);
  188.     glutInitWindowPosition(0, 0);
  189.     glutCreateWindow("FUNCAO");
  190.     gluOrtho2D(-5, 7, -5, 5);
  191.     glutKeyboardFunc(Teclado);
  192.     glutMouseFunc(Mouse);
  193.     glutDisplayFunc(redesenha);
  194.     glutMainLoop();
  195.     return (0);
  196. }
  197.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement