Programa para demonstrar operadores
Publicado por Perfil removido 12/04/2005
[ Hits: 6.130 ]
Programa para demonstrar operadores
Cubo 3d na tela !! EXELENTE
/*** CUBO.C ***/ #include <graphics.h> #include <time.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <math.h> #define ESC 27 #define SetaPCima 72 #define SetaPBaixo 80 #define SetaPEsquerda 75 #define SetaPDireita 77 #define TeclaF1 59 #define TeclaF2 60 #define TeclaF3 61 #define TeclaF4 62 #define TeclaF5 63 /* ----------------------------------------------------------------------- */ float A, B, /* Coordenadas do centro da tela */ TAM = 70, /* Coeficiente de ampliacao */ nu = 40, /* Quant. subdivisoes no dominio da variavel u */ nv = 40, /* Quant. subdivisoes no dominio da variavel v */ teta = M_PI/7, fi = M_PI/7, proj_X, proj_Y; /* Coordenadas da projecao do ponto (x, y, z) */ typedef struct { float x, y, z; } ponto; typedef struct { float x, y; } ponto_plano; /* ------------------------------------------------------------------------- */ void Reta(int x0, int y0, int x1, int y1, int cor) { /* Desenha a reta (x0, y0) - (x1, y1) usando o algoritmo de Bresenham */ int aux, primeiro_octante, dx, dy, incrE, incrNE, X0, X1, Y0, Y1, d, x, y, inclinacao_negativa; if (x0 > x1) { aux = x0; x0 = x1; x1 = aux; aux = y0; y0 = y1; y1 = aux; } X0 = x0; X1= x1; Y0 = y0; Y1 = y1; inclinacao_negativa = (y0 > y1); if (inclinacao_negativa) { aux = y0; y0 = y1; y1 = aux; } primeiro_octante = (y1 - y0 <= x1 - x0); if (!primeiro_octante) { aux = x0; x0 = y0; y0 = aux; aux = x1; x1 = y1; y1 = aux; } dx = x1 - x0; dy = y1 - y0; d = 2*dy - dx; incrE = 2*dy; incrNE = 2*(dy - dx); x = x0; y = y0; if (primeiro_octante) if (inclinacao_negativa) putpixel(x, Y1 + Y0 - y, cor); else putpixel(x, y, cor); else if (inclinacao_negativa) putpixel(X1 + X0 - y, x, cor); else putpixel(y, x, cor); while (x < x1) { if (d < 0) { d = d + incrE; x = x + 1; } else { d = d + incrNE; x = x + 1; y = y + 1; } if (primeiro_octante) if (inclinacao_negativa) putpixel(x, Y1 + Y0 - y, cor); else putpixel(x, y, cor); else if (inclinacao_negativa) putpixel(X1 + X0 - y, x, cor); else putpixel(y, x, cor); } } /* ----------------------------------------------------------------------- */ void IniciaModoGrafico(void) { /* Inicializa o modo grafico. O arquivo .BGI associado ao tipo de video utilizado (Ex.: EGAVGA.BGI) precisa estar no subdiretorio atual. */ int gm, gd = DETECT; initgraph(&gd, &gm, ""); if (graphresult() != grOk) exit(1); /* Encerra a execucao do programa se houver erro na mudanca para o modo grafico */ } /* ------------------------------------------------------------------------ */ void ProjetaPonto(float x, float y, float z) { /* Calcula as coordenadas do ponto (x, y, z) no plano de projecao. E' feita uma ampliacao de TAM unidades e uma translacao da origem do sistema de coordenadas do plano de projecao para o ponto (A, B) */ float X, Y; /* Gira (x, y, z) de teta radianos em torno do eixo z e de fi radianos em torno do eixo y seguida de uma projecao ortografica na direcao x */ X = y*cos(teta) + x*sin(teta); Y = z*cos(fi) + x*cos(teta)*sin(fi) - y*sin(fi)*sin(teta); /* Ampliacao e translacao de (X, Y) */ proj_X = A + X*TAM; proj_Y = B - Y*TAM; } /* ------------------------------------------------------------------------- */ void DesenhaCubo(ponto *p1, ponto *p2, ponto *p3, ponto *p4, ponto *q1, ponto *q2, ponto *q3, ponto *q4, int cor) { ponto_plano P1, P2, P3, P4, Q1, Q2, Q3, Q4; ProjetaPonto(p1->x, p1->y, p1->z); P1.x = proj_X, P1.y = proj_Y; ProjetaPonto(p2->x, p2->y, p2->z); P2.x = proj_X, P2.y = proj_Y; ProjetaPonto(p3->x, p3->y, p3->z); P3.x = proj_X, P3.y = proj_Y; ProjetaPonto(p4->x, p4->y, p4->z); P4.x = proj_X, P4.y = proj_Y; ProjetaPonto(q1->x, q1->y, q1->z); Q1.x = proj_X, Q1.y = proj_Y; ProjetaPonto(q2->x, q2->y, q2->z); Q2.x = proj_X, Q2.y = proj_Y; ProjetaPonto(q3->x, q3->y, q3->z); Q3.x = proj_X, Q3.y = proj_Y; ProjetaPonto(q4->x, q4->y, q4->z); Q4.x = proj_X, Q4.y = proj_Y; Reta(P1.x, P1.y, P2.x, P2.y, cor); Reta(P2.x, P2.y, P3.x, P3.y, cor); Reta(P3.x, P3.y, P4.x, P4.y, cor); Reta(P4.x, P4.y, P1.x, P1.y, cor); Reta(Q1.x, Q1.y, Q2.x, Q2.y, cor); Reta(Q2.x, Q2.y, Q3.x, Q3.y, cor); Reta(Q3.x, Q3.y, Q4.x, Q4.y, cor); Reta(Q4.x, Q4.y, Q1.x, Q1.y, cor); Reta(Q1.x, Q1.y, P1.x, P1.y, cor); Reta(Q2.x, Q2.y, P2.x, P2.y, cor); Reta(Q3.x, Q3.y, P3.x, P3.y, cor); Reta(Q4.x, Q4.y, P4.x, P4.y, cor); } /* ------------------------------------------------------------------------- */ void GiraCubo_z(ponto *p1, ponto *p2, ponto *p3, ponto *p4, ponto *q1, ponto *q2, ponto *q3, ponto *q4, float angulo) { float x, y; float cosseno, seno; cosseno = cos(angulo), seno = sin(angulo); x = p1->x * cosseno - p1->y * seno; y = p1->x * seno + p1->y * cosseno; p1->x = x, p1->y = y; x = p2->x * cosseno - p2->y * seno; y = p2->x * seno + p2->y * cosseno; p2->x = x, p2->y = y; x = p3->x * cosseno - p3->y * seno; y = p3->x * seno + p3->y * cosseno; p3->x = x, p3->y = y; x = p4->x * cosseno - p4->y * seno; y = p4->x * seno + p4->y * cosseno; p4->x = x, p4->y = y; x = q1->x * cosseno - q1->y * seno; y = q1->x * seno + q1->y * cosseno; q1->x = x, q1->y = y; x = q2->x * cosseno - q2->y * seno; y = q2->x * seno + q2->y * cosseno; q2->x = x, q2->y = y; x = q3->x * cosseno - q3->y * seno; y = q3->x * seno + q3->y * cosseno; q3->x = x, q3->y = y; x = q4->x * cosseno - q4->y * seno; y = q4->x * seno + q4->y * cosseno; q4->x = x, q4->y = y; } /* ------------------------------------------------------------------------- */ void GiraCubo_y(ponto *p1, ponto *p2, ponto *p3, ponto *p4, ponto *q1, ponto *q2, ponto *q3, ponto *q4, float angulo) { float x, z; float cosseno, seno; cosseno = cos(angulo), seno = sin(angulo); x = p1->x * cosseno - p1->z * seno; z = p1->x * seno + p1->z * cosseno; p1->x = x, p1->z = z; x = p2->x * cosseno - p2->z * seno; z = p2->x * seno + p2->z * cosseno; p2->x = x, p2->z = z; x = p3->x * cosseno - p3->z * seno; z = p3->x * seno + p3->z * cosseno; p3->x = x, p3->z = z; x = p4->x * cosseno - p4->z * seno; z = p4->x * seno + p4->z * cosseno; p4->x = x, p4->z = z; x = q1->x * cosseno - q1->z * seno; z = q1->x * seno + q1->z * cosseno; q1->x = x, q1->z = z; x = q2->x * cosseno - q2->z * seno; z = q2->x * seno + q2->z * cosseno; q2->x = x, q2->z = z; x = q3->x * cosseno - q3->z * seno; z = q3->x * seno + q3->z * cosseno; q3->x = x, q3->z = z; x = q4->x * cosseno - q4->z * seno; z = q4->x * seno + q4->z * cosseno; q4->x = x, q4->z = z; } /* ------------------------------------------------------------------------- */ void main(void) { ponto p1, p2, p3, p4, q1, q2, q3, q4; float angulo = M_PI/20.0; int ch, cor = RED; IniciaModoGrafico(); setbkcolor(BLUE); A = getmaxx()/2, B = getmaxy()/2; p1.x = -1, p1.y = -1, p1.z = -1; p2.x = 1, p2.y = -1, p2.z = -1; p3.x = 1, p3.y = 1, p3.z = -1; p4.x = -1, p4.y = 1, p4.z = -1; q1.x = -1, q1.y = -1, q1.z = 1; q2.x = 1, q2.y = -1, q2.z = 1; q3.x = 1, q3.y = 1, q3.z = 1; q4.x = -1, q4.y = 1, q4.z = 1; do { DesenhaCubo(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, cor); ch = getch(); if (ch == 0) { ch = getch(); DesenhaCubo(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, 0); switch (ch) { case SetaPDireita: GiraCubo_z(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, -angulo); break; case SetaPEsquerda: GiraCubo_z(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, angulo); break; case SetaPCima: GiraCubo_y(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, -angulo); break; case SetaPBaixo: GiraCubo_y(&p1, &p2, &p3, &p4, &q1, &q2, &q3, &q4, angulo); break; case TeclaF1: cor = 1 + (cor + 1) % 15; break; case TeclaF2: TAM *= 1.25; break; case TeclaF3: TAM /= 1.25; break; case TeclaF4: teta *= 1.25; break; case TeclaF5: fi *= 1.25; break; } } } while (ch != ESC); closegraph(); } /* ------------------------------------------------------------------------- */ /*** FIM DE "CUBO.C" ***/
Algorítmo para Calcular Raiz Quadrada
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Como abrir o pycharm no linux (2)
VMs e Interfaces de Rede desapareceram (12)