int main(void) { int largura, altura, i; float Cpz, Tz, rxmin, rxmax, rymin, rymax; struct ponto3D * P[9], * PR[9], * PP[9], * PPN[9]; struct ponto2D * PD[9], pontos[9]; for (i=1;i<=8;++i) P[i] = (struct ponto3D *) malloc(sizeof(struct ponto3D)); Cpz = -50.0; Tz = 100.0; P[1]->x = 50.0; P[1]->y = -30.0; P[1]->z = 15.0; P[2]->x = 50.0; P[2]->y = -30.0; P[2]->z = -15.0; P[3]->x = 50.0; P[3]->y = 30.0; P[3]->z = 15.0; P[4]->x = 50.0; P[4]->y = 30.0; P[4]->z = -15.0; P[5]->x = -50.0; P[5]->y = -30.0; P[5]->z = 15.0; P[6]->x = -50.0; P[6]->y = -30.0; P[6]->z = -15.0; P[7]->x = -50.0; P[7]->y = 30.0; P[7]->z = 15.0; P[8]->x = -50.0; P[8]->y = 30.0; P[8]->z = -15.0; for (i=1;i<=8;++i) PP[i] = Projeta(Cpz, Tz, P[i]); rxmin = -250.0; rxmax = 250.0; rymin = -250.0; rymax = 250.0; for (i=1;i<=8;++i) PPN[i] = Sru2srn(rxmin, rxmax, rymin, rymax, PP[i]); largura = (int) 2*rxmax; altura = (int) 2*rymax; for (i=1;i<=8;++i) PD[i] = Srn2srd(largura, altura, PPN[i]); for (i=1;i<=8;++i) pontos[i] = *PD[i]; for (i=1;i<=8;++i) printf("Ponto %d = %d %d \n",i, pontos[i].x,pontos[i].y); Visualiza(largura, altura, pontos); return 0; }
int main(){ //Pontos iniciais Ponto P1, P2, P3, P4, P5, P6, P7, P8; float se, co, tz, cpz; //Pontos rotacionados Ponto *rP1, *rP2, *rP3, *rP4, *rP5, *rP6, *rP7, *rP8; //Pontos Projetados perspectivamente Ponto *iP1, *iP2, *iP3, *iP4, *iP5, *iP6, *iP7, *iP8; //Declaração da matriz de rotação struct matriz4x4 mRotaciona; int RXmin,RXmax,RYmin,RYmax,a,b; Window win; Display *display; int width = 256, height = 256, x = 0, y = 0, i, tx, ty,ref,rot; GC gc; unsigned long valuemask = 0; XGCValues values; XColor cor; P1.x = 30; P1.y = -10; P1.z = 10; P1.W = 1; P2.x = 30; P2.y = -10; P2.z = -10; P2.W = 1; P3.x = 30; P3.y = 10; P3.z = 10; P3.W = 1; P4.x = 30; P4.y = 10; P4.z = -10; P4.W = 1; P5.x = -30; P5.y = -10; P5.z = 10; P5.W = 1; P6.x = -30; P6.y = -10; P6.z = -10; P6.W = 1; P7.x = -30; P7.y = 10; P7.z = 10; P7.W = 1; P8.x = -30; P8.y = 10; P8.z = -10; P8.W = 1; //Variaveis para calculo do seno e cosseno do angulo de rotacao se = sin(90*PI/180); co = cos(90*PI/180); //Inicializacao da matriz de Rotacao em relacao ao eixo z mRotaciona.a11 = co; mRotaciona.a12 = -se; mRotaciona.a13 = 0; mRotaciona.a14 = 0; mRotaciona.a21 = se; mRotaciona.a22 = co; mRotaciona.a23 = 0; mRotaciona.a24 = 0; mRotaciona.a31 = 0; mRotaciona.a32 = 0; mRotaciona.a33 = 1; mRotaciona.a34 = 0; mRotaciona.a41 = 0; mRotaciona.a42 = 0; mRotaciona.a43 = 0; mRotaciona.a44 = 1; //************************************** (a) ********************************************** //Estou utilizando a regra da mão direita //Chamada da funcao que rotaciona o ponto rP1 = rotaciona(&mRotaciona, &P1); rP2 = rotaciona(&mRotaciona, &P2); rP3 = rotaciona(&mRotaciona, &P3); rP4 = rotaciona(&mRotaciona, &P4); rP5 = rotaciona(&mRotaciona, &P5); rP6 = rotaciona(&mRotaciona, &P6); rP7 = rotaciona(&mRotaciona, &P7); rP8 = rotaciona(&mRotaciona, &P8); //************************************** (b) ********************************************** //Projeção Perspectiva printf("\n\nDigite o valor Tz: \n"); scanf("%f",&tz); printf("\nDigite o valor Cpz: \n"); scanf("%f",&cpz); iP1 = Projeta(tz, cpz, rP1); iP2 = Projeta(tz, cpz, rP2); iP3 = Projeta(tz, cpz, rP3); iP4 = Projeta(tz, cpz, rP4); iP5 = Projeta(tz, cpz, rP5); iP6 = Projeta(tz, cpz, rP6); iP7 = Projeta(tz, cpz, rP7); iP8 = Projeta(tz, cpz, rP8); //************************************** (c) ********************************************** //Entrada dos valores do retangulo de visualizacao printf("\n\nDigite o valor do RXmin: \n"); scanf("%f",&RXmin); printf("\nDigite o valor RXmax: \n"); scanf("%f",&RXmax); printf("\n\nDigite o valor do RYmin: \n"); scanf("%f",&RYmin); printf("\nDigite o valor RYmax: \n"); scanf("%f",&RYmax); //width = modulo(RXmin) + modulo(RXmax); //height = modulo(RYmin) + modulo(RYmax); win = XCreateSimpleWindow(display, RootWindow(display, DefaultScreen(display)), x, y, width, height, 4, BlackPixel(display, DefaultScreen(display)), WhitePixel(display, DefaultScreen(display))); XMapWindow(display, win); gc = XCreateGC(display, win, valuemask, &values); XSync(display, False); XSetForeground(display, gc, WhitePixel(display, DefaultScreen(display))); XSetBackground(display, gc, BlackPixel(display, DefaultScreen(display))); XAllocNamedColor(display, XDefaultColormap(display, DefaultScreen(display)),"black", &cor, &cor); XSetForeground(display, gc, cor.pixel); //Desenhando os pontos a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP2->x; b = iP2->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); a = iP1->x; b = iP1->y; XDrawPoint(display, win, gc, a, b); //Desenhando as 12 retas reta(&win, &gc, display,iP1->x,iP2->x,iP1->y,iP2->y); reta(&win, &gc, display,iP2->x,iP4->x,iP2->y,iP4->y); reta(&win, &gc, display,iP4->x,iP3->x,iP4->y,iP3->y); reta(&win, &gc, display,iP3->x,iP1->x,iP3->y,iP1->y); reta(&win, &gc, display,iP1->x,iP5->x,iP1->y,iP5->y); reta(&win, &gc, display,iP2->x,iP6->x,iP2->y,iP6->y); reta(&win, &gc, display,iP3->x,iP7->x,iP3->y,iP7->y); reta(&win, &gc, display,iP4->x,iP8->x,iP4->y,iP8->y); reta(&win, &gc, display,iP5->x,iP6->x,iP5->y,iP6->y); reta(&win, &gc, display,iP6->x,iP8->x,iP6->y,iP8->y); reta(&win, &gc, display,iP8->x,iP7->x,iP8->y,iP7->y); reta(&win, &gc, display,iP7->x,iP5->x,iP7->y,iP5->y); XFlush(display); sleep(30); XFreeGC(display, gc); XCloseDisplay(display); return 0; }