{"id":78,"date":"2022-03-23T22:08:49","date_gmt":"2022-03-23T22:08:49","guid":{"rendered":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/"},"modified":"2022-03-23T22:08:49","modified_gmt":"2022-03-23T22:08:49","slug":"transformacoes-geometricas-2","status":"publish","type":"page","link":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/","title":{"rendered":"Transforma\u00e7\u00f5es geom\u00e9tricas"},"content":{"rendered":"<p>&#013;<\/p>\n<div class=\"NAVHEADER\">&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<th align=\"middle\" colspan=\"3\">Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013;<br \/>\nOpenGL<\/th>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"bottom\" align=\"left\" width=\"10%\"><a href=\"transformacoes.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"bottom\" align=\"middle\" width=\"80%\" \/>&#013;<\/p>\n<td valign=\"bottom\" align=\"right\" width=\"10%\"><a href=\"transformacoes-braco.html\">Next<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;\n<\/div>\n<p>&#013;<\/p>\n<div class=\"CHAPTER\">&#013;<\/p>\n<h1><a name=\"TRANSFORMACOES\">4.1. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; Cubos<\/a><\/h1>\n<p>&#013;<\/p>\n<p>O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 compreender como as transforma\u00e7\u00f5es geom\u00e9tricas s\u00e3o &#013;<br \/>\nrealizadas sobre os objetos em rela\u00e7\u00e3o a um determinado sistema de coordenadas. &#013;<br \/>\nNo OpenGL existem fun\u00e7\u00f5es para realizar transla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento, &#013;<br \/>\nbastando apenas ao usu\u00e1rio ajustar os seus par\u00e2metros para obter o efeito &#013;<br \/>\ndesejado. Ser\u00e1 analisado um programa simples com 4 cubos em posi\u00e7\u00f5es diferentes no espa\u00e7o (sofreram&#013;<br \/>\ntransla\u00e7\u00f5es e\/ou escalamentos e\/ou rota\u00e7\u00f5es), como mostra a <a href=\"transformacoes-cubo4.html#FIG-CUBO\">Figura &#013;<br \/>\n4-1<\/a><\/p>\n<p>&#013;<\/p>\n<div class=\"FIGURE\">&#013;<\/p>\n<p><b><a name=\"FIG-BRACO\">Figura 4-1. Cubos<\/a><\/b><\/p>\n<p>&#013;<\/p>\n<p \/><font color=\"red\"><font color=\"red\"><font color=\"red\" \/><\/font><\/font>&#013;<\/p>\n<p><img decoding=\"async\" src=\"cubo.jpg\" \/><\/p>\n<\/div>\n<p>&#013;<\/p>\n<p>O programa que implementa os 4 cubos \u00e9 mostrado no <a href=\"transformacoes-cubo4.html#EXAMPLE-CUBO\">Exemplo &#013;<br \/>\n4-1<\/a>. Para finalizar o programa, basta digitar <b class=\"KEYCAP\">ESC<\/b>. As teclas e &#013;<br \/>\nsuas respectivas a\u00e7\u00f5es est\u00e3o definidas na fun\u00e7\u00e3o <tt class=\"FUNCTION\">keyboard()<\/tt>.<\/p>\n<p>&#013;<\/p>\n<div class=\"EXAMPLE\">&#013;<\/p>\n<p><b><a name=\"EXAMPLE-BRACO\">Exemplo 4-1. programa <\/a><a href=\"cubos4.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">cubos4.c<\/tt><\/a><\/b><\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">#include &lt;GL\/glut.h&gt;&#013;\n#include &lt;stdlib.h&gt;&#013;\n&#013;\nvoid init(void){&#013;\n  glClearColor (0.0, 0.0, 0.0, 0.0);&#013;\n}&#013;\n&#013;\nvoid display(void){&#013;\n  glClear (GL_COLOR_BUFFER_BIT);&#013;\n  glPushMatrix();&#013;\n&#013;\n  \/* Cubo 1 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (-2.0, 0.0, 0.0);&#013;\n  glScalef (3.0, 2.0, 5.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n   &#013;\n  \/* Cubo 2 *\/&#013;\n  glPushMatrix();&#013;\n  glRotatef (25.0, 0.0, 0.0, 1.0);&#013;\n  glTranslatef (2.0, 0.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n   \/* Cubo 3 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, 2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n     \/* Cubo 4 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, -2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n  glPopMatrix();&#013;\n  glutSwapBuffers();&#013;\n}&#013;\n&#013;\nvoid reshape (int w, int h){&#013;\n  glViewport (0, 0, (GLsizei) w, (GLsizei) h);&#013;\n  glMatrixMode (GL_PROJECTION);&#013;\n  glLoadIdentity ();&#013;\n  gluPerspective(65.0, (GLfloat) w\/(GLfloat) h, 1.0, 20.0);&#013;\n  glMatrixMode(GL_MODELVIEW);&#013;\n  glLoadIdentity();&#013;\n  glTranslatef (0.0, 0.0, -10.0);&#013;\n}&#013;\nvoid keyboard(unsigned char key, int x, int y){&#013;\n  switch (key) {&#013;\n  case 27:                                         \/\/ tecla Esc (encerra o programa)&#013;\n\texit(0);&#013;\n\tbreak;&#013;\n  }&#013;\n}&#013;\n&#013;\nint main(int argc, char** argv){&#013;\n  glutInit(&amp;argc, argv);&#013;\n  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);&#013;\n  glutInitWindowSize (500, 500); &#013;\n  glutInitWindowPosition (100, 100);&#013;\n  glutCreateWindow (argv[0]);&#013;\n  init ();&#013;\n  glutDisplayFunc(display); &#013;\n  glutReshapeFunc(reshape);&#013;\n  glutKeyboardFunc(keyboard);&#013;\n  glutMainLoop();&#013;\n  return 0;&#013;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&#013;<\/p>\n<p>Para compilar e executar o programa <a href=\"cubos4.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">cubos4.c<\/tt><\/a>, salve-o juntamente com o &#013;<br \/>\narquivo <a href=\"Makefile\" target=\"_top\" rel=\"noopener\">Makefile<\/a> em um diret\u00f3rio e execute a seguinte seq\u00fc\u00eancia de &#013;<br \/>\ncomandos:<\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"SCREEN\"><tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">make<\/b> <span class=\"OPTION\">cubos4<\/span>&#013;\n<tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">.\/cubos4<\/b><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<br \/>\n&#013;<\/p>\n<div class=\"SECT1\">&#013;<\/p>\n<h1 class=\"SECT1\"><a name=\"TRANSFORMACOES-CUBO-DESCRICAO\">4.1.1. Descri\u00e7\u00e3o do programa <tt class=\"FILENAME\">cubos4.c<\/tt><\/a><\/h1>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">void display(void)&#013;\n{&#013;\n  glClear (GL_COLOR_BUFFER_BIT);&#013;\n  glPushMatrix();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Uma vez que as transforma\u00e7\u00f5es geom\u00e9tricas no espa\u00e7o s\u00e3o representadas por &#013;<br \/>\nmatrizes, o uso de uma pilha de matrizes de transforma\u00e7\u00e3o ajuda a lembrar a &#013;<br \/>\nseq\u00fc\u00eancia de transforma\u00e7\u00f5es realizadas. No OpenGL, esta facilidade \u00e9 provida &#013;<br \/>\npelas fun\u00e7\u00f5es <tt class=\"FUNCTION\">glPushMatrix()<\/tt>, que insere a matriz de &#013;<br \/>\ntransforma\u00e7\u00e3o corrente na pilha, e <tt class=\"FUNCTION\">glPopMatrix()<\/tt>, que &#013;<br \/>\nretira a matriz do topo da pilha e torna esta \u00faltima a matriz de transforma\u00e7\u00e3o &#013;<br \/>\ncorrente. Neste exemplo, a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glPushMatrix()<\/tt> serve &#013;<br \/>\npara lembrar os par\u00e2metros de transla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento no in\u00edcio das &#013;<br \/>\nopera\u00e7\u00f5es de desenho.<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  \/* Cubo 1 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (-2.0, 0.0, 0.0); &#013;\n  glScalef (3.0, 2.0, 5.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Mais uma vez, a matriz de transforma\u00e7\u00e3o corrente \u00e9 armazenada na pilha, agora &#013;<br \/>\npara restringir o efeito das fun\u00e7\u00f5es <tt class=\"FUNCTION\">glTranslatef()<\/tt> e &#013;<br \/>\n<tt class=\"FUNCTION\">glScalef()<\/tt>. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glTranslatef()<\/tt> &#013;<br \/>\ndesloca o objeto em 2 unidades na dire\u00e7\u00e3o negativa do eixo x. A fun\u00e7\u00e3o &#013;<br \/>\n<tt class=\"FUNCTION\">glScalef()<\/tt> altera a escala dos eixos x, y e z. A fun\u00e7\u00e3o &#013;<br \/>\n<tt class=\"FUNCTION\">glutWireCube()<\/tt> desenha um cubo centrado na origem do &#013;<br \/>\nsistema de coordenadas com aresta de tamanho unit\u00e1rio, conforme o argumento que &#013;<br \/>\nlhe foi passado. Quando a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glPopMatrix()<\/tt> \u00e9 &#013;<br \/>\nchamada, a matriz de transforma\u00e7\u00e3o do topo da pilha passa a vigorar, fazendo com &#013;<br \/>\nque o cubo seja distorcido, assumindo a forma de um parelep\u00edpedo. A origem do &#013;<br \/>\nsistema de coordenadas volta a ser o centro do bra\u00e7o.<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  \/* Cubo 2 *\/&#013;\n  glPushMatrix();&#013;\n  glRotatef (25.0, 0.0, 0.0, 1.0); &#013;\n  glTranslatef (2.0, 0.0, 0.0); &#013;\n  glScalef (2.0, 1.0, 4.0); &#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Mais uma vez, a matriz de transforma\u00e7\u00e3o corrente \u00e9 armazenada na pilha, agora &#013;<br \/>\npara restringir o efeito das fun\u00e7\u00f5es <tt class=\"FUNCTION\">glTranslatef()<\/tt> e &#013;<br \/>\n<tt class=\"FUNCTION\">glScalef()<\/tt> e <tt class=\"FUNCTION\">glRotatef()<\/tt>. <\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glRotatef()<\/tt> possui o seguinte prot\u00f3tipo:<\/p>\n<p>&#013;<\/p>\n<div class=\"FUNCSYNOPSIS\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<p><code><code class=\"FUNCDEF\">void glRotatef<\/code>(GLfloat angle, GLfloat x, &#013;<br \/>\nGLfloat y, GLfloat z);<\/code><\/p>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Quando chamada, <tt class=\"FUNCTION\">glRotatef()<\/tt> efetua uma rota\u00e7\u00e3o de <tt class=\"PARAMETER\"><i>angle<\/i><\/tt> graus no sistema de coordenadas na dire\u00e7\u00e3o &#013;<br \/>\ncontra o sentido do rel\u00f3gio em torno de um vetor que vai da origem ao ponto &#013;<br \/>\n(x,y,z)<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p>Os outros dois cubos (<i>cubo3<\/i> e <i>cubo4<\/i>) s\u00e3o desenhados de forma semelhante ao <i>cubo1<\/i>.<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glPopMatrix();&#013;\n  glutSwapBuffers();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glPopMatrix()<\/tt> remove a matriz de &#013;<br \/>\ntransforma\u00e7\u00e3o do topo da pilha, fazendo-a corrente, retornando assim o sistema &#013;<br \/>\nde coordenadas original. Quando <tt class=\"FUNCTION\">glutSwapBuffers()<\/tt> \u00e9 &#013;<br \/>\nchamada, os buffers de desenho e de apresenta\u00e7\u00e3o s\u00e3o alternados e a nova imagem &#013;<br \/>\ndos cubos \u00e9 apresentada.<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">void reshape (int w, int h)&#013;\n{&#013;\n  glViewport (0, 0, (GLsizei) w, (GLsizei) h); <\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Define a \u00e1rea dentro da janela de desenho no sistema de coordenadas atual, &#013;<br \/>\norigem (x,y), largura (w) e altura (h), que OpenGL pode utilizar para efetuar &#013;<br \/>\ndesenhos. Este trecho de c\u00f3digo permite que toda a \u00e1rea da janela possa ser &#013;<br \/>\nutilizada quando a janela sofrer redimensionamento.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glMatrixMode (GL_PROJECTION);&#013;\n  glLoadIdentity ();&#013;\n  gluPerspective(65.0, (GLfloat) w\/(GLfloat) h, 1.0, 20.0);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glMatrixMode()<\/tt> especifica a pilha de &#013;<br \/>\nmatrizes que ser\u00e1 o alvo das opera\u00e7\u00f5es matriciais subseq\u00fcentes; neste caso, a &#013;<br \/>\npilha de matrizes de proje\u00e7\u00e3o. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glLoadIdentity()<\/tt> &#013;<br \/>\ninicia a matriz de proje\u00e7\u00e3o corrente como a matriz identidade. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">gluPerspective()<\/tt> define a transforma\u00e7\u00e3o de perspectiva usada &#013;<br \/>\nno exemplo. Proje\u00e7\u00f5es geom\u00e9tricas n\u00e3o s\u00e3o alvo desta li\u00e7\u00e3o e por enquanto n\u00e3o &#013;<br \/>\nser\u00e3o estudadas.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glMatrixMode(GL_MODELVIEW);&#013;\n  glLoadIdentity();&#013;\n  glTranslatef (0.0, 0.0, -10.0);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glMatrixMode()<\/tt> especifica agora que a pilha &#013;<br \/>\nde matrizes de <i class=\"FOREIGNPHRASE\">modelview<\/i>, usadas para definir &#013;<br \/>\ntransla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento, ser\u00e1 o alvo das transforma\u00e7\u00f5es subseq\u00fcentes. &#013;<br \/>\nA fun\u00e7\u00e3o <tt class=\"FUNCTION\">glLoadIdentity()<\/tt> inicia a matriz de <i class=\"FOREIGNPHRASE\">modelview<\/i> corrente como a matriz identidade. Finalmente, &#013;<br \/>\no objeto \u00e9 deslocado -10 unidades para o fundo da tela, melhorando a sua &#013;<br \/>\nvisualiza\u00e7\u00e3o.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glutReshapeFunc(reshape);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Especifica a fun\u00e7\u00e3o de retorno para redimensionamento de janela, possuindo o &#013;<br \/>\nseguinte prot\u00f3tipo:<\/p>\n<p>&#013;<\/p>\n<div class=\"FUNCSYNOPSIS\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<p><code><code class=\"FUNCDEF\">funcao<\/code>(int width, int height);<\/code><\/p>\n<p>&#013;<\/p>\n<p \/><\/div>\n<\/div>\n<\/div>\n<p>&#013;<\/p>\n<div class=\"NAVFOOTER\">&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;<br \/>\n&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\"><a href=\"transformacoes.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\"><a href=\"indexunisal2006.html\">Home<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\"><a href=\"transformacoes-braco.html\">Next<\/a><\/td>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\">Transforma\u00e7\u00f5es<\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\">\u00a0<\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\">Transforma\u00e7\u00f5es &#8211; Bra\u00e7o rob\u00f3tico<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; 4.1. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; Cubos &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 compreender como as transforma\u00e7\u00f5es geom\u00e9tricas s\u00e3o &#013; realizadas sobre os objetos em rela\u00e7\u00e3o a um determinado sistema de coordenadas. &#013; No OpenGL &hellip; <a href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/\" class=\"more-link\">Continuar lendo <span class=\"screen-reader-text\">Transforma\u00e7\u00f5es geom\u00e9tricas<\/span><\/a><\/p>\n","protected":false},"author":48,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-78","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:description\" content=\"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; 4.1. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; Cubos &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 compreender como as transforma\u00e7\u00f5es geom\u00e9tricas s\u00e3o &#013; realizadas sobre os objetos em rela\u00e7\u00e3o a um determinado sistema de coordenadas. &#013; No OpenGL &hellip; Continuar lendo Transforma\u00e7\u00f5es geom\u00e9tricas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:image\" content=\"http:\/\/cubo.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/transformacoes-geometricas-2\\\/\",\"url\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/transformacoes-geometricas-2\\\/\",\"name\":\"Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/#website\"},\"datePublished\":\"2022-03-23T22:08:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/transformacoes-geometricas-2\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/transformacoes-geometricas-2\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/transformacoes-geometricas-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transforma\u00e7\u00f5es geom\u00e9tricas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/#website\",\"url\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/\",\"name\":\"Marco Antonio Garcia de Carvalho, PhD\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/","og_locale":"pt_BR","og_type":"article","og_title":"Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD","og_description":"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; 4.1. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; Cubos &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 compreender como as transforma\u00e7\u00f5es geom\u00e9tricas s\u00e3o &#013; realizadas sobre os objetos em rela\u00e7\u00e3o a um determinado sistema de coordenadas. &#013; No OpenGL &hellip; Continuar lendo Transforma\u00e7\u00f5es geom\u00e9tricas","og_url":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/","og_site_name":"Marco Antonio Garcia de Carvalho, PhD","og_image":[{"url":"cubo.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/","name":"Transforma\u00e7\u00f5es geom\u00e9tricas - Marco Antonio Garcia de Carvalho, PhD","isPartOf":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website"},"datePublished":"2022-03-23T22:08:49+00:00","breadcrumb":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wordpress.ft.unicamp.br\/magic\/"},{"@type":"ListItem","position":2,"name":"Transforma\u00e7\u00f5es geom\u00e9tricas"}]},{"@type":"WebSite","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/","name":"Marco Antonio Garcia de Carvalho, PhD","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wordpress.ft.unicamp.br\/magic\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/78\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/media?parent=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}