Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <GL/glut.h>
- int g_eixo = 1;
- int g_funcao = 0;
- float R = 1, G = 0, B = 0;
- void init(){
- g_eixo = 1;
- g_funcao = 0;
- }
- void F01() {
- float x, y;
- glColor3f(R, G, B);
- glBegin(GL_POINTS);
- for (x = -5; x <= 5; x = x + 0.01) {
- y = x + 1;
- glVertex2f(x, y);
- }
- glEnd();
- }
- void F02() {
- float x, y;
- glColor3f(R, G, B);
- glBegin(GL_POINTS);
- for (x = -5; x <= 5; x = x + 0.001) {
- y = x * x - 4;
- glVertex2f(x, y);
- }
- glEnd();
- }
- void F03() {
- float x, y;
- glColor3f(R, G, B);
- glBegin(GL_POINTS);
- for (x = -5; x <= 5; x+=0.0001) {
- y = (x * x * x) + 3* x * x;
- glVertex2f(x, y);
- }
- glEnd();
- }
- void Eixo() {
- if (g_eixo == 1) {
- glLineWidth(1);
- glColor3f(0.7, 0.7, 0.7);
- glBegin(GL_LINES);
- for (int i = -5; i <= 5; i++) {
- glVertex2f(-5, i);
- glVertex2f(5, i);
- glVertex2f(i, -5);
- glVertex2f(i, 5);
- }
- glEnd();
- }
- glColor3f(0, 0, 0);
- glLineWidth(2);
- glBegin(GL_LINES);
- //Eixo x
- glVertex2f(-5, 0);
- glVertex2f(5, 0);
- //Eixo y
- glVertex2f(0, -5);
- glVertex2f(0, 5);
- glEnd();
- }
- void layout() {
- //Eixosg
- glLineWidth(1);
- glBegin(GL_LINES);
- //Secundários
- glColor3f(0.7, 0.7, 0.7);
- for (float i = 3; i <= 5; i = i + 0.2) {
- glVertex2f(5, i);
- glVertex2f(7, i);
- glVertex2f(i + 2, 3);
- glVertex2f(i + 2, 5);
- }
- //Eixos x e y
- glColor3f(0, 0, 0);
- glVertex2f(5, 4);
- glVertex2f(7, 4);
- glVertex2f(6, 3);
- glVertex2f(6, 5);
- glEnd();
- //Função do 1º Grau
- glLineWidth(2);
- glColor3f(1, 0, 0);
- glBegin(GL_LINES);
- glVertex2f(5, 1);
- glVertex2f(7, 3);
- glEnd();
- glBegin(GL_POINTS);
- //Função do 2º Grau
- for (float x = -1; x <= 1; x = x + 0.001) glVertex2f(x + 6, 2 * x * x - 1);
- //Função do 3º Grau
- for (float x = -1; x <= 1; x = x + 0.001) glVertex2f(x + 6, 2 * x * x * x - 2 * x - 2);
- glEnd();
- //Cor
- glBegin(GL_QUADS);
- glColor3f(1, 0, 0);
- glVertex2f(5, -3);
- glColor3f(0, 1, 0);
- glVertex2f(5, -5);
- glColor3f(0, 0, 1);
- glVertex2f(7, -5);
- glColor3f(0, 0, 0);
- glVertex2f(7, -3);
- glEnd();
- //Contorno da Tela
- glLineWidth(5);
- glColor3f(0, 0, 0);
- glBegin(GL_LINE_LOOP);
- glVertex2f(-5, -5);
- glVertex2f(-5, 5);
- glVertex2f(7, 5);
- glVertex2f(7, -5);
- glEnd();
- //Linhas de Grade
- glBegin(GL_LINES);
- glVertex2f(5, -5);
- glVertex2f(5, 5);
- for (int i = -3; i <= 3; i = i + 2) {
- glVertex2f(5, i);
- glVertex2f(7, i);
- }
- glEnd();
- }
- void redesenha() {
- glClearColor(1, 1, 1, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- if (g_eixo != 0) Eixo();
- switch(g_funcao) {
- case 1: F01(); break;
- case 2: F02(); break;
- case 3: F03(); break;
- }
- layout();
- glFlush();
- }
- void Teclado(unsigned char key, int x, int y) {
- switch (key) {
- case 'E':
- case 'e':
- g_eixo++;
- if (g_eixo == 3) g_eixo = 0;
- break;
- case '0': init(); break;
- case '1':
- g_funcao = 1;
- break;
- case '2':
- g_funcao = 2;
- break;
- case '3':
- g_funcao = 3;
- break;
- }
- redesenha();
- }
- void Mouse(int button, int state, int x, int y) {
- if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
- if (x > 500 && x < 600) {
- if (y < 100) g_eixo = (g_eixo==3) ? 0 : (g_eixo+1);
- else if (y < 200) g_funcao = 1;
- else if (y < 300) g_funcao = 2;
- else if (y < 400) g_funcao = 3;
- else if (y < 500) g_funcao = 1; //colocar a ultima função aqui
- }
- }
- redesenha();
- }
- int main(int argc, char ** argv) {
- glutInit( & argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
- glutInitWindowSize(600, 500);
- glutInitWindowPosition(0, 0);
- glutCreateWindow("FUNCAO");
- gluOrtho2D(-5, 7, -5, 5);
- glutKeyboardFunc(Teclado);
- glutMouseFunc(Mouse);
- glutDisplayFunc(redesenha);
- glutMainLoop();
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement