UNIVERSIDADE CATÓLICA DE
BRASÍLIA
PRÓ-REITORIA DE GRADUAÇÃO TRABALHO DE CONCLUSÃO DE CURSO
Curso de Física
SOFTWARE VISUAL DAS ESTRUTURAS CRISTALINAS DOS SÓLIDOS EM TRÊS
DIMENSÕES Autor: Flávio Ferreira de Aguiar
Orientador: Dr. Paulo Eduardo de Brito
BRASÍLIA 2006
2
Flávio Ferreira de Aguiar
Software Visual das Estruturas Cristalinas dos Sólidos em Três Dimensões.
TRABALHO DE CONCLUSÃO DE CURSO APRESENTADO A UCB, SOB ORIENTAÇÃO DO PROF. Dr. PAULO EDUARDO DE BRITO.
Brasília-DF 2006
3
SOFTWARE VISUAL DAS ESTRUTURAS CRISTALINAS DOS SÓLIDOS EM TRÊS
DIMENSÕES
RESUMO
Este trabalho tem como foco principal o desenvolvimento de um software visual das estruturas
cristalinas dos sólidos em três dimensões com intuitos didáticos. Para essa produção, o estudo da
linguagem de programação C foi constante, o que possibilitou a criação do software em OpenGl no
ambiente Linux. Esse estudo, aliado às leituras e ao aprendizado das características e propriedades
das estruturas cristalinas, forneceu subsídios para obter como produto final a visualização gráfica de
nove das catorze principais redes dos sólidos de Bravais. Como a preocupação a respeito dos cristais
e dos elétrons nos cristais estão entre as principais áreas de pesquisa do estudo da física de estados
sólidos, acredita-se que o software tornará acessível a observação e análise dessas estruturas.
Palavras-chave: software, estruturas cristalinas, OpenGl, sólidos de Bravais.
ABSTRACT
The mean goal of this work is to develop visual software which allows viewing the crystalline structures
of solids structure of crystal in three dimensions with didactic intentions. For this production, the study
of the programming language C it was constant, what it made possible the creation of the software in
OpenGl in the Linux environment. This study, ally to the readings and the learning of the
characteristics and properties of the crystalline structures, supplied subsidies to get as end item
(production) the graphical visualization of nine of fourteen main nets of solids of Bravais. As the
concern regarding crystals and of electrons in crystals they are between the main areas of research to
the study of the physics of solid states, giving credits that the software will become accessible the
comment and analysis of these structures.
Key-words: software, crystalline structures, OpenGl, solids of Bravais.
1 – INTRODUÇÃO
4
O presente trabalho tem como objeto a criação de um software visual tomando por
base a interface gráfica Mesa, que é uma biblioteca de rotinas gráficas e de modelagem, bi
(2D) e tridimensional (3D), extremamente portável, rápida e gratuita. O Mesa, além de
fornecer desenhos de primitivas gráficas, tais como linhas e polígonos, dá suporte a
iluminação, colorização, mapeamento de textura, transparência, animação, entre muitos
outros efeitos especiais visando assim uma melhor visualização.
Para a construção do software, o sistema de gerenciamento de janelas foi feito pelas
bibliotecas GLUT (OpenGL Utility Toolkit) e GLU (OpenGL Utility library), que fornece várias
funções auxiliares, principalmente primitivas gráficas como superfícies quádricas e splines.
Esse software possibilita a produção das estruturas cristalinas dos sólidos em três
dimensões, com o objetivo de facilitar a visualização das principais redes de Bravais por
parte dos alunos e proporcionar um conhecimento melhor desses arranjos tridimensionais
periódicos de átomos.
As estruturas cristalinas dos sólidos em três dimensões são formadas a partir da
repetição de partículas (átomos e moléculas) no espaço, originando as principais redes com
grupos de átomos ligados a cada ponto. Essas estruturas resultam justamente da
associação desses átomos e moléculas, de modo que um seja perfeitamente equivalente a
outro e igualmente espaçados.
Existem catorze tipos diferentes de estruturas cristalinas básicas tridimensionais,
devido justamente à forma como esses átomos ou moléculas se posicionam, ou seja, estão
localizadas nas células unitárias, formando, assim, as redes de Bravais.
Dos catorze tipos de estruturas, foram construídos apenas nove que são as
tetragonais, trigonais e as ortorrômbicas, podendo essas ser visualizadas através do
software.
A pesquisa torna-se, então uma oportunidade de aprimoramento acadêmico em
campos que relacionam a física do estado sólido, propiciando um amadurecimento e
independência do aluno rumo às áreas de pesquisa científicas e a uma melhor formação
profissional.
2 - MATERIAIS E MÉTODOS
2.1 - HISTÓRIA DA CRISTALOGRAFIA
Até o fim do século XIX e início do século XX, uma série de informações a respeito
dos cristais havia sido acumulada, porém pouco conhecimento se tinha sobre os detalhes o
interior da estrutura atômica. Somente com o surgimento da mecânica quântica, no início do
século XX, é que se foi possível explicar os fenômenos que ocorrem em escala atômica.
5
Em 1848, o cristalógrafo francês Bravais determinou matematicamente que esferas
poderiam ser arranjadas no espaço através de no máximo 14 arranjos, esses arranjos
ficaram conhecidos como os 14 sólidos de Bravais. Para ele os átomos seriam considerados
esferas perfeitas.
Já no século XX, para provar que esses arranjos formavam as estruturas cristalinas
dos materiais, era necessário usar um meio menor que o objeto estudado para captar
dados, pois se o meio fosse maior que o objeto, não teria sensibilidade para captar seus
detalhes. Assim:
“... para observarmos átomos não poderíamos usar a luz visível, já que os diâmetros atômicos são da ordem de angstrons (1Å ou10-10 m), com isso, estruturas cristalinas como a cúbica do NaCl (sal de cozinha) [figura 1], tem 5,64 Å de face, já a luz visível, apresenta uma faixa de comprimento de onda de 4000 (violeta) até 7000 (vermelho) Å. Ou seja, o menor comprimento de onda da luz visível é cerca de 800 vezes maior que uma aresta da estrutura cúbica do sal de cozinha. Assim, o uso de luz visível para uma observação direta da estrutura cristalina está completamente descartada.” (BARROS, 2001)
Figura 1: Estrutura do sal de cozinha, onde as esferas verdes são os átomos de cloro (Cl-) e as esferas cinza representam os átomos de sódio (Na+). (BARROS, 2001)
Com a utilização do raio-X para observar os átomos, verificou-se que devido o seu
comprimento de onda ser na faixa de 0,5 até 2,5 Å, a sua alta energia faria com que os
átomos interagissem com ele. Com isso, o físico alemão Von Laue propôs que núcleos
atômicos, por concentrar a massa dos átomos, poderiam difratar raios-X, formando franjas
de difração. Contudo, isso só seria possível se os átomos apresentassem uma estrutura
cristalina (estando organizados de forma periódica no espaço) e se os raios-X possuíssem
comprimento de onda menor que os espaços interatômicos. Assim, ele obteve em um filme
fotográfico, pontos sensibilizados devido à difração sofrida pelos raios-X após passarem por
uma amostra monocristalina.
Com esse resultado, os físicos ingleses W. H. Bragg e seu filho W. L. Bragg
formularam uma equação para determinar os ângulos onde estariam os picos de intensidade
6
máxima de difração. Conhecendo as distâncias interatômicas, seria possível solucionar
problemas para determinar estruturas cristalinas. Assim, os Bragg obtiveram a estrutura do
NaCl.
A difração de raios-X contribuiu para demonstrar várias outras estruturas, auxiliando
também para propor a estrutura em dupla hélice do DNA, a qual pode ser verificada na
figura 2.
Figura 2: Padrão de difração de raios-X do DNA. (BARROS, 2001)
A partir da comprovação da natureza ondulatória do elétron, Knoll e Ruska criaram o
primeiro microscópio eletrônico do tipo transmissão, onde usavam elétrons para gerar
imagens. Nesse microscópio, um feixe de elétrons atravessa uma amostra muito fina,
interagindo com os átomos dessa amostra e por fim gera uma imagem numa placa pintada
com uma tinta fluorescente. O uso desse microscópio possibilitou a criação de uma figura de
difração de uma fase, possibilitando determinar a estrutura cristalina de cada fase
constituinte do material. No entanto, as imagens são geradas apenas em duas dimensões,
representando o interior do material, não sendo possível observar a superfície das amostras.
A solução para essa limitação do microscópio foi alcançada obtendo-se uma imagem
por varredura de elétrons. Nesse microscópio (de varredura), da figura 3, o feixe varre a
seção da amostra através de uma seqüência de linhas e não fica fixo como ocorre no
microscópio de transmissão.
7
Figura 3: Imagem do primeiro microscópio de varredura na Universidade de Cambridge e a primeira imagem (amostra de alumínio utilizada). (BARROS, 2001)
Além da importância desses microscópios na caracterização dos materiais, através
da observação das estruturas que estavam inacessíveis pelo microscópio ótico, eles
possibilitam realizar a difração de elétrons, determinando a estrutura cristalina, visto que o
choque dos elétrons de alta energia contra os átomos da amostra resulta na geração de
raios-X, que saem em comprimentos de onda característicos de cada espécie atômica.
O microscópio eletrônico de varredura por ter uma grande distância focal, permite por
em foco imagens de uma superfície muito irregular e com isso pôde-se observar o aspecto
de peças fraturadas e determinar o motivo da quebra do material.
Em 1928, Orowan submetendo uma amostra monocristalina de zinco metálico a um
ensaio de tração, observou que a energia necessária para fraturar o material era muito
menor do que a prevista pelas energias de ligação. Com isso, surgiu uma série de hipóteses
de defeitos na estrutura cristalina dos materiais, fato diferente do que se conhecia, visto que
nessa época acreditava-se que um cristal apresentava uma estrutura perfeita, com átomos
organizados lado a lado sem nenhuma falha.
Devido a esse fato, em 1934, Orowan, simultaneamente a Taylor, propôs que “... a
estrutura cristalina não era perfeita, que ao longo dos planos atômicos empilhados poderiam
haver falhas. Essas falhas foram chamadas de discordâncias ou deslocações...” (BARROS,
2001)
Essa teoria da discordância se adaptava muito bem aos resultados obtidos na prática
para a deformação dos materiais, apesar de não ser muito aceita. Finalmente, em 1956,
8
Bollmmann, Hirsch, Horne e Whelan observaram, pela primeira vez, uma discordância por
um microscópio eletrônico de transmissão. E com esse resultado verificou-se:
“... esses defeitos cristalinos regem a deformação dos metais, o empilhamento de defeitos implica no surgimento de uma região onde os átomos perdem suas ligações e que, consequentemente, resulta no surgimento e crescimento de trincas, ao mesmo tempo que o empilhamento dos defeitos provoca o endurecimento dos metais. O conhecimento de como esses defeitos se comportam, durante a deformação, permite determinar o processamento dos metais.” (BARROS, 2001)
Como exemplo tem-se o processo de estamparia, onde a porta do automóvel que era
originalmente uma chapa plana de aço apresenta um formato final ao colocá-la entre dois
moldes, prensando-a e impondo uma deformação pelo fechamento desses dois moldes.
O produto mais recente para observar a estrutura da matéria são os microscópios de
varredura por tunelamento, desenvolvido em 1981 por Binnig e Roher dos laboratórios da
IBM de Zurique. Esse instrumento torna quase mentiroso o conceito de que átomos não
podem ser observados.
“... No microscópio de tunelamento, uma agulha funciona como sonda varrendo a superfície de uma amostra condutora. Entre a sonda e a amostra é aplicada uma voltagem. Os elétrons da amostra deveriam permanecer nos átomos, mas pela mecânica quântica os elétrons podem "tunelar" da amostra para a sonda gerando uma diminuta corrente elétrica. Quando a sonda percorre paralelamente a superfície da amostra, as variações de corrente elétrica determinam as colinas e vales da superfície. A agulha assim consegue "enxergar" a topografia dos átomos. Para que esse equipamento possa ter uma resolução atômica, a agulha tem que ser tão fina que a espessura da ponta deve ser de um único átomo.” (BARROS, 2001)
Esse microscópio consegue gerar imagens somente em amostras condutoras de
eletricidade. Para amostras isolantes, foi desenvolvido, em 1986, o microscópio de força
atômica, onde são usadas as forças de repulsão entre os átomos. Assim, num microscópio
de força atômica, a agulha, ao aproximar-se do último átomo da eletrosfera da amostra,
sofre a ação de forças de repulsão. A agulha está apoiada sobre uma alavanca onde há um
espelho que reflete um feixe de laser, as variações do feixe refletido determinam os
movimentos da agulha e consequentemente o relevo da amostra, sendo possível perceber
desde a rugosidade e determinar o acabamento superficial, até determinar os primeiros
estágios de oxidação de metais.
Dentre as implicações tecnológicas encontradas na indústria eletrônica estão os
microprocessadores que são compostos por transistores impressos em placas de silício
metálico; na indústria metal/mecânica e na construção civil encontram-se materiais como:
novos tipos de aços mais confiáveis, a exemplo dos polímeros; ligas de alumínio; aços mais
resistentes; plásticos que não se deterioram rapidamente se tornando tintas resistentes e o
concreto.
9
2.2 - A Estrutura Cristalina
Estrutura cristalina é a forma como átomos e moléculas, que constituem um sólido,
estão ordenados no espaço. Ela resulta da associação desses átomos e moléculas, de
modo que um seja perfeitamente equivalente a outro e igualmente espaçados.
“... Nos cristais mais simples, tais como o cobre, a prata, o ferro, o alumínio e os metais alcalinos, a unidade estrutural é representada por um único átomo. Em muitos cristais, a unidade estrutural é representada por um conjunto de átomos ou por um grupo de moléculas, até cerca de 100 para cristais inorgânicos e 10000 para cristais de certas proteínas. A estrutura de todos os cristais pode ser descrita em termos de uma rede com um grupo de átomos ligados a cada ponto dessa rede. Este grupo é denominado base; ele se repete no espaço para formar a estrutura cristalina.” (KITTEL, 1978, p. 3)
Existem bases de átomos que estão ligadas a cada ponto de rede, sendo cada uma
dessas bases idênticas em combinações, arranjo e orientação. A superposição de uma base
sobre cada ponto de uma rede, forma uma estrutura cristalina.
No caso dos gases inertes e da maioria dos metais, a base pode ser constituída por
um único átomo. Existem, porém estruturas cujas bases envolvem mais de 1000 átomos. A
posição do centro do átomo da base, em relação a um ponto da rede, é escrita como:
cbar ⋅+⋅+⋅= zyx (1)
onde : k,j,i === cba e x, y e z são as componentes do vetor r podendo variar no
intervalo de [0,1].
De maneira geral, a matéria sólida se apresenta sob dois estados fundamentais de
ordenação: o amorfo e o cristalino. Apenas o cristalino possui uma estrutura interna
ordenada, apresentando, consequentemente, estrutura cristalina.
Existem substâncias parcialmente cristalinas, que têm em sua composição, porções
de cristais introduzidos em material amorfo (é o caso da maioria das rochas). Alguns
materiais, aparentemente amorfos, podem ser cristalinos, como é o caso da areia de quartzo
(que é constituída por grande quantidade de pequenos cristais) ou das argilas (que
aparentam ser amorfas, mas são constituídas por cristais microscópicos).
“Um cristal ideal é composto por uma arrumação de átomos numa rede definida por três vetores fundamentais a, b, e c, de modo que as configurações atômicas sejam exatamente iguais tanto para um observador situado em um ponto r quanto para um observador situado num ponto r’ dado por: cbarr' wvu +++= (2) onde u, v, w são números inteiros arbitrários. O conjunto de pontos r’ especificados por (2) para todos os valores dos inteiros u, v, w defini uma rede. Uma rede é um agrupamento periódico regular de pontos no espaço. A rede definida deste modo é uma abstração matemática: a estrutura cristalina se forma somente quando houver uma base de átomos ligada a cada ponto da rede. A relação lógica é:
Rede + Base = Estrutura Cristalina
10
Tanto a rede quanto os vetores de translação a, b, c são chamados de primitivos se as configurações forem as mesmas para dois pontos quaisquer r e r’ que sempre satisfaçam para uma escolha conveniente dos números inteiros u, v, w. Esta definição dos vetores de translação primitivos garante que não existe nenhuma célula com volume menor que possa servir de bloco elementar para a construção da estrutura. Freqüentemente usamos os vetores de translação primitivos para definir os eixos cristalinos, embora eixos cristalinos não primitivos possam ser usados quando estes forem mais simples. Os eixos cristalinos a, b, c formam três arestas adjacentes de um paralelepípedo; portanto, eles formam o paralelepípedo primitivo. Uma operação de translação da rede é definida como o deslocamento de um cristal paralelamente a si mesmo através de um vetor de translação do cristal dado por: cbat wvu ++= (3) Dois pontos arbitrários da rede podem ser ligados por um vetor dessa forma.” (KITTEL, 1978, p. 4).
Para uma dada estrutura, é possível existir mais de uma rede e, para uma dada rede,
é sempre possível escolher mais de um conjunto de eixos cristalinos. Não podemos
escolher a base sem antes selecionarmos a rede e os eixos que desejamos usar. Todos os
fenômenos funcionam do mesmo modo, desde que a base seja escolhida adequadamente,
para qualquer conjunto de eixos cristalinos escolhidos.
As operações de simetria de um cristal são as operações que transformam uma
estrutura cristalina nela própria. Estas operações incluem as operações de translação da
rede. Além destas, existem operações de rotação e de reflexão denominadas operações
pontuais. Em torno de certos pontos da rede ou em torno de certos pontos especiais no
interior de um paralelepípedo elementar, é possível aplicar rotações e reflexões que
transformam o cristal nele mesmo. Finalmente, existem operações compostas constituídas
por combinações de operações de translações com operações pontuais. Os livros-texto
sobre cristalografia são dedicados, em grande parte, á descrição das operações de simetria
de translação.
2.3 - Célula Unitária
A repetição no espaço de uma estrutura elementar, que constitui a menor subdivisão
de uma rede cristalina, conservando as características gerais da rede, é denominada célula
unitária. Gerando, assim, a formação de um sólido cristalino, conforme figura 4, a seguir:
11
Figura 4: Célula unitária de um cristal de sal (NaCl). (ANGRENSE, 2006)
Os átomos presentes nas células unitárias estão dispostos de certa forma que
conhecendo suas coordenadas é possível descrever a estrutura cristalina. Porém, ao
colocar uma mesma substância sob condições de temperatura e pressão diferentes, ela se
cristaliza de formas diversas fazendo com que suas células unitárias sejam também
diferentes umas das outras, como é o caso do Carbono que se cristaliza nas formas de
diamante, grafite, entre outras.
Outros fatos que contribuem para o tamanho e a forma das células unitárias serem
diferentes são: a capacidade que um átomo de um elemento tem de se combinar com outro
(valência química), suas dimensões, entre outros.
Dessa forma, ao conhecer as células unitárias: “... e levando em conta os eixos de
simetria e a posição do centro geométrico de cada elemento do cristal, é possível descrever
qualquer cristal com base em diagramas designados por redes de Bravais, nome que
homenageia Auguste Bravais (1811-1863), um dos pioneiros do seu estudo.” (ANGRENSE,
2006)
Como dito anteriormente, a célula unitária pode ser bastante complexa, porém
qualquer cristal pode ser descrito pelas 14 redes cristalinas diferentes demonstradas por
Bravais.
Um cristal é, então, constituído pela repetição infinita de células unitárias
semelhantes e regulares que determinam a sua macro-estrutura, conforme figura 4.
As impurezas que constituem alguns cristais são responsáveis por determinar as
propriedades elétricas e óticas, a temperatura de fusão e a reatividade química desses
cristais, que são denominados naturais.
“O paralelepípedo definido pelos eixos primitivos a,b,c denomina-se célula primitiva. Uma célula primitiva é um tipo de célula unitária. A célula preencherá todo espaço pela ação de operações de translação convenientes: uma célula primitiva é uma célula de volume mínimo. Existem muitos modos de escolher eixos primitivos e a célula primitiva para uma dada rede. Para todas as escolhas, o número de átomos da base primitiva será o mesmo. Existe a
12
densidade de um ponto da rede por célula primitiva. Existem pontos da rede nos oito vértices do paralelepípedo, porém cada vértice está ligado com oito células em torno do ponto. O volume de uma célula definida pelos eixos a,b,c de acordo com análise elementar, é: ⟩⋅×⟨= cbaVc (4)
A base associada com um ponto da rede de uma célula primitiva pode ser denominada base primitiva. Nenhuma base primitiva pode conter um número de átomos menor do que o número de átomos contido na base primitiva. Outro método para se escolher uma célula de igual volume Vc. A célula formada deste modo é conhecida pelos físicos como célula primitiva de Wigner-Seitz.” (KITTEL, 1978, p. 6)
2.4 - Sistemas cristalinos
Cada cristal possui um conjunto de elementos de simetria, dos quais só existem 32
combinações possíveis desses vários elementos. Esses 32 grupos pontos de simetria foram
chamados de classes de simetria ou classes cristalinas, que é o conjunto de cristais
diferentes que apresentam o mesmo grupo ponto de simetria.
As substâncias se enquadram nessas 32 classes de simetrias citadas e são
distribuídas em sete sistemas cristalinos sendo eles: Cúbico ou Isométrico, Hexagonal,
Romboédrica, Tetragonal, Ortorrômbico, Monoclínico, Triclínico.
Ao analisar geometricamente os sistemas de cristalização, concluí-se que existem
sete sistemas distintos, onde dentro de alguns deles possuem subcategorias devido aos
centros de simetria. Da combinação dos eixos e ângulos resultam os sete sistemas básicos
de cristalização citados anteriormente:
Cúbico, ou isométrico — fornece quatro eixos ternários de rotação, o que permite um
grande número de grupos espaciais (36). Produz estruturas simples e lineares e é
aquele em que, para além de todos os cristais possuírem quatro eixos ternários de
simetria, os eixos cristalográficos possuem comprimentos iguais e são
perpendiculares entre si.
Tetragonal — permite um eixo quaternário de rotação e 68 grupos espaciais (o maior
número possível em qualquer sistema). Todos os cristais deste sistema têm a
característica de possuírem, para além de um eixo quaternário de simetria, três eixos
cristalográficos perpendiculares entre si, sendo os dois horizontais de igual
comprimento e o vertical de comprimento diferente.
Ortorrômbico — requer três eixos binários de rotação ou um eixo de rotação binário e
dois planos de imagem reflexa. Permite 59 grupos espaciais. Produz estruturas de
grande complexidade tendo como característica comum a todos os cristais deste
sistema, a de apresentarem ao menos um eixo binário de simetria. Possuem três
eixos cristalográficos perpendiculares entre si, todos com comprimentos diferentes.
Hexagonal — permite um eixo de rotação senário e 27 grupos espaciais, mas é
considerado por vezes como mera variante do sistema trigonal (por duplicação).
13
Neste sistema todos os cristais possuem ou um eixo ternário de simetria, ou um eixo
senário (eixo de ordem seis) de simetria. Possuem quatro eixos cristalográficos, dos
quais três são horizontais, com comprimentos iguais e cruzando-se em ângulos de
120°, e o quarto é o vertical, com comprimento diferente dos demais.
Romboédrico, ou trigonal — requer um eixo ternário de rotação, permitindo 25
grupos espaciais.
Monoclínico — requer um eixo de rotação binário e um plano reflexo. Permite 13
grupos espaciais. Os cristais deste sistema em geral apresentam apenas um eixo de
simetria binário, ou um único plano de simetria, ou a combinação de ambos.
Possuem três eixos cristalográficos, todos com comprimentos diferentes. Dois eixos
formam um ângulo oblíquo entre si, sendo o terceiro perpendicular ao plano formado
pelos outros dois.
Triclínico — agrupa todos os casos que não podem ser acomodados em qualquer
dos restantes sistemas, exibindo apenas simetria translacional ou inversão. Permite
apenas 2 grupos espaciais. Os cristais com este sistema caracterizam-se pela
ausência de eixos ou planos de simetria, apresentando três eixos cristalográficos
com comprimentos desiguais e oblíquos entre si.
“Uma análise do grau de simetria de cada um dos sistemas acima apontados permite concluir que o mais simples, e o mais simétrico, é o cúbico, já que apresenta a simetria do cubo, beneficiando da isometria das suas faces. Os restantes seis sistemas ordenam-se de acordo com as seguintes seqüências decrescente de simetria: hexagonal, tetragonal, romboédrico, ortorrômbico, monoclínico e triclínico.” (ANGRENSE, 2006) O sistema hexagonal é frequentemente considerado como sendo uma variante do
sistema trigonal, já que é possível, sem alterar as simetrias, a partir de um produzir o outro.
Os átomos, moléculas se posicionam na rede originando a estrutura cristalina. A
partir dessas disposições, obtêm-se as seguintes variáveis:
2.5 - Sistemas de cristalização
“Apesar da sua enorme diversidade, os cristais, dependendo da composição e condições de formação, assumem formas regulares e hoje facilmente dedutíveis em função das características atômicas e moleculares dos seus constituintes. Isso permite a sua fácil classificação em função de um número reduzido de parâmetros, conhecidos por parâmetros de rede.” (ANGRENSE, 2006) A partir desses parâmetros: “... é possível determinar o paralelepípedo que constitui
a menor subdivisão de uma rede cristalina que conserve as características gerais de todo o
retículo, de modo que por simples multiplicação da mesma, se possa reconstruir o sólido
cristalino completo. Esses paralelepípedos são em geral designados por células unitárias...”
(ANGRENSE, 2006)
14
É possível identificar sistemas de cristalização, que são grupos pontuais da malha
cristalina, ou sistemas cristalinos básicos, a partir dos parâmetros da rede, isto é, do
comprimento dos lados e dos eixos do paralelepípedo elementar da célula unitária e dos
ângulos que as suas faces formam entre si.
“Em duas dimensões, os grupos pontuais estão associados com cinco tipos diferentes de redes. Em três dimensões, os grupos de simetrias pontuais necessitam de 14 tipos diferentes de redes que estão listadas na tabela 1.” (KITTEL, 1978, p. 12)
Tabela 1: Os 14 tipos de redes em três dimensões. Sistema Número de
redes Símbolos da
rede Restrições para célula
convencional, para os eixos e para ângulos
Triclínico 1 P cba ≠≠ γ≠β≠α
Monoclínico 2 P, C cba ≠≠ β≠=γ=α o90
Ortorrômbico 4 P, C, I, F cba ≠≠ o90=γ=β=α
Tetragonal 2 P, I cba ≠= o90=γ=β=α
Cúbico 3 P ou sc cba == I ou bcc o90=γ=β=α F ou fcc
Trigonal 1 R cba == ooo 90120;90 ≠<γ=β=α
Hexagonal 1 P cba ≠= o90=β=α o120=γ
Figura 5: Eixos cristalinos a, b e c. O ângulo α é o que está compreendido entre b e c.
“O tipo geral de rede é a rede triclínica. Os 14 tipos de redes estão convenientemente grupados em sete sistemas cristalinos de acordo com os setes tipos convencionais de células unitárias: triclínico, monoclínico, ortorrômbico, tetragonal, cúbico, trigonal e hexagonal. A divisão em sistemas está resumida em termos das relações axiais especiais para as células unitárias convencionais. Os eixos a, b, c e os ângulos γβα ,, . Os módulos
cba ,, denominam-se parâmetros da rede. As células primitivas. Às vezes, uma célula primitiva não possui uma relação mais óbvia com os elementos de simetria pontuais do que uma célula primitiva.” (KITTEL, 1978, p. 12)
15
No sistema cúbico existem três redes: a rede cúbica simples (sc), a rede cúbica de
corpo centrado (bcc) e a rede cúbica de face centrada (fcc). As características destas redes
cúbicas estão resumidas na tabela 1. As células primitivas contêm somente um ponto da
rede, porém as células cúbicas convencionais contêm dois pontos da rede (bcc) ou quatro
pontos da rede (fcc). As posições de um ponto na célula são especificadas por (1) em
termos das coordenadas atômicas x, y, z cujos valores são frações dos comprimentos axiais
a, b e c, na direção da respectiva coordenada, sendo a origem o vértice da célula. Portanto,
as coordenadas do centro do corpo da célula são (1,1,1). Os centros das faces possuem
coordenadas (1,1,0); (0,1,1); (1,0,1). As coordenadas dos átomos nas redes fcc e bcc são
dadas normalmente em termos da célula cúbica convencional.
No sistema hexagonal, a célula convencional escolhida está sobre um prisma reto
tendo na base três losangos com ângulos de 60°, sendo essa uma rede primitiva.
2.6 - Redes de Bravais
Essas redes são uma homenagem a Auguste Bravais que demonstrou a sua
existência em 1848.
Combinando os sete sistemas cristalinos, que resultam das diferentes agrupações
relativas ao tamanho das arestas das células unitárias e dos seus ângulos localizados nos
vértices, com as distintas disposições espaciais das partículas nas faces e no interior das
células unitárias é possível criar 28 estruturas cristalinas. Porém, devido à simetria das
soluções, identifica-se apenas 14 tipos diferentes de estruturas cristalinas básicas
tridimensionais, devido justamente à forma como as partículas (átomos ou moléculas) se
posicionam, ou seja, estão localizadas nas células unitárias, formando, assim, as redes de
Bravais.
A partir das 14 estrututras cristalinas básicas, é possível criar as outras 28
existentes.
Com isso, um arranjo espacial, para ser classificado como uma rede de Bravais deve
obedecer em conjunto às seguintes condições:
1. A estrutura deve ser constituída por uma célula unitária;
2. Os planos que contenham pontos situados em faces opostas devem ser paralelos;
3. As arestas da célula unitária devem ligar pontos equivalentes na estrutura.
As células unitárias possuem características diferentes, sendo possível diferenciá-las
umas das outras e por causa delas define-se as propriedades dos materiais.
16
A rede de Bravais é um conjunto infinito de pontos discretos, com orientações e
arranjos idênticos, independente do ponto do espaço em que se observa a rede. A partir dos
vetores base, que são um conjunto de vetores, é feita uma translação de um único ponto em
pequenos intervalos, construindo esse pontos que formam a rede.
Ao transladar cada um dos 14 tipos de células unitárias formadas a partir dos grupos
de simetrias pontuais, presentes na tabela 1, por todo o espaço se originarão redes
distintas. Quando átomos são colocados em coordenadas específicas dessas redes, serão
formadas estruturas cristalinas, conhecidas como redes de Bravais. A figura 6 ilustra um
desses exemplos. A simetria que dará origem à estrutura cristalina poderá ser mais
complexa que a simetria da rede, pois ao posicionar os átomos deve-se preencher todo o
espaço da rede de forma contínua.
Figura 6: Esquema de uma célula unitária, mostrando as arestas e ângulos
caracterizadores.(ANGRENSE, 2006)
Para além da sua utilização em cristalografia, as redes de Bravais constituem uma
importante ferramenta de análise tridimensional em geometria euclidiana.
2.7 - Classificação das redes de Bravais
O sistema de classificação das redes de Bravais, construídas a partir das células
unitárias, mais comum é o apresentado na figura 7 seguinte:
17
Figura 7: Os 14 tipos diferentes de células unitárias, conhecidas como Redes de Bravais.
(ANGRENSE, 2006)
Muitos ainda consideram a 15ª rede de Bravais como sendo a estrutura hexagonal
compacta, que possui três pontos reticulares no interior do hexágono, resultando uma célula
unitária mais complexa. Sendo este um caso especial.
3 - SOFTWARE VISUAL
O primeiro passo para o desenvolvimento do projeto foi estudar a API (aplication
program interface) Opengl, a qual seria utilizada na confecção do software, sendo
necessário para isso ter como pré-requisito o conhecimento da linguagem de programação
C.
A maior dificuldade dessa etapa inicial foi a de encontrar bibliografias relacionadas ao
tema proposto, visto que grande parte dos livros estavam escritos em inglês.
Algumas limitações surgiram ao começar o software, pois a biblioteca Opengl não era
disponibilizada e quando instalada gerava incompatibilidades com a grande maioria das
versões de Linux. Para remediar essa questão, foi imprescindível a instalação e
desinstalação de versões do Linux como o Curumim e o Fedora, onde, por fim, encontrou-se
o Opengl no Conectiva.
Para otimizar a criação do software foi preciso tomar melhor conhecimento sobre a
física do estado sólido, e mais especificamente sobre as estruturas cristalinas.
18
Consequentemente, por meio dos livros estudados, verificaram-se algumas dificuldades
para desenvolver o software com as 14 redes cristalinas dos sólidos, chamadas também de
redes de Bravais.
A fim de obter a translação de vetores bases foi necessário criar uma rede de pontos
que pode ser visualizada na figura 8.
Figura 8: Redes de pontos criadas para transladar os vetores bases.
Transladando o vetor unitário,
)zyx( cbar ++= (5)
onde:
k
j
i
=
=
=
c
b
a
(6)
por todos os pontos construiu-se a rede mais simples (figura 9), que seria utilizada como
base para as formações das demais através da mudança do vetor unitário. Nessa rede
cúbica foram implementadas várias ferramentas disponibilizadas pelo Opengl, como a de
controlar a posição da “câmera”, rotacionar e transladar o objeto utilizando o teclado, além
da função de redimensionamento da janela em caso de minimização ou maximização da
mesma evitando, assim, distorções no desenho.
19
Figura 9: Rede mais simples construída, utilizada como referência para a construção das próximas.
Na confecção do programa efetivou-se a utilização de alguns periféricos como o mouse
e o teclado, que facilitariam na visualização das estruturas cristalinas, onde através do
teclado pode-se girar e mudar a posição da molécula na janela e através de um clique no
botão esquerdo ocorre a aproximação do objeto.
Foi feito também o estudo dos vetores bases a, b e c, das estruturas de corpo centrado
(bcc) e de face centrada (fcc) que podem ser representadas respectivamente pelos vetores:
Vetores Base da estrutura bcc:
2)kji(
2)kji(
2)kji(
+−=
++−=
−+=
c
b
a
(7)
Vetores Base da estrutura fcc:
2)ik(
2)kj(
2)ji(
+=
+=
+=
c
b
a
(8)
os quais deram origem às demais estruturas, onde ao serem executados no programa,
resultou um problema ao gerar as linhas que iriam unir os vários átomos que compõem
essas estruturas desejadas.
20
Outra dificuldade encontrada para concluir o trabalho foi na construção das demais
moléculas, sendo indispensável mudar a metodologia utilizada, visto que houve problema na
sua visualização, a partir da translação de vetores bases por toda a extensão da rede. Esse
fato sobreveio devido ao surgimento de átomos que ficavam fora da estrutura a ser
visualizada (figura 10). Dessa forma, ao fixar as regras para obter o desaparecimento
desses átomos ocorreu um aumento no tempo de processamento em conseqüência da
extensão do programa. Com isso, a metodologia inicial foi descartada.
Figura 10: Problemas na construção do programa, onde alguns átomos ficaram fora das estruturas
fcc e bcc, respectivamente, a serem visualizadas.
O novo método utilizado na confecção das estruturas foi delimitar pontos e
posteriormente ligá-los por linhas, dispondo a primeira estrutura. Assim, a construção da
21
rede ocorreu com a translação da molécula base em x, y e z, auxiliando a visualização das
estruturas.
Foi efetivada também no programa a entrada do parâmetro “estrutura a ser visualizada”,
assim como a escolha de teclas consecutivas para a rotação e translação da rede cristalina
na tela e ainda elaborou-se um manual para que o usuário não tenha dúvidas na utilização
do software.
Houve uma mudança no projeto pensado inicialmente, pois não mais seria necessário
desenhar as estruturas que possuíam como parâmetros de entrada os ângulos menores ou
maiores que os ângulos retos nos planos xy, yz e xz. Isso ocorreu principalmente devido a
grande quantidade de parâmetros que o programa já possuía. Como resultados serão
apresentados nove estruturas cristalinas, sendo elas cúbicas (figuras 11, 12, 13),
ortorrômbicas (figuras 14, 15, 16, 17) e tetragonais (figuras 18, 19).
Como o programa foi executado no Linux, foi essencial a criação de um executável para
a utilização do software no Windows.
Figura 11: Estrutura Cúbica P, obtida a partir do comando:final 1 1
22
A rede de Bravais mais simples em três dimensões é a rede cúbica simples do
português conhecida como cs ou sc do inglês (simple cubic), Nessa rede todos os
pontos reticulares estão localizados nos vértices do paralelepípedo que constitui a
célula. Produz estruturas simples e lineares e é aquele em que, para além de todos os
cristais possuírem quatro eixos ternários de simetria, os eixos cristalográficos possuem
comprimentos iguais e são perpendiculares entre si. Na natureza apenas o polônio (Po)
se cristaliza com essa estrutura a pressão ambiente.
Figura 12: Estrutura Cúbica F, obtida a partir do comando:final 2 1
Esse tipo de rede de Bravais é conhecida como cúbica de face centrada do
português CFC ou FCC do inglês (Face-centered cubic) ela apresenta pontos reticulares nas
faces para além dos localizados nos vértices. Assim como na cúbica simples ela produz
estruturas simples e lineares e é aquele em que, para além de todos os cristais possuírem
quatro eixos ternários de simetria, os eixos cristalográficos possuem comprimentos iguais e
são perpendiculares entre si.
23
Figura 13: Estrutura Cúbica I, obtida a partir do comando:final 3 1.
Esse tipo de rede de Bravais é conhecida como cúbica de corpo centrado do
português CCC ou BCC do inglês (Body-centered cubic). Ela apresenta além dos pontos
que determinam os vértices, um ponto reticular no centro da célula. Assim como na cúbica
simples ela produz estruturas simples e lineares e é aquele em que, para além de todos os
cristais possuírem quatro eixos ternários de simetria, os eixos cristalográficos possuem
comprimentos iguais e são perpendiculares entre si.
24
Figura 14: Estrutura Ortorrômbica P, obtida a partir do comando: final 4 1
Essa rede de Bravais é conhecida como rede ortorrômbica simples, também
denominada de ortorrômbica P. Nessa rede todos os pontos reticulares estão localizados
nos vértices do paralelepípedo que constitui a célula. Produz estruturas de grande
complexidade tendo como característica comum a todos os cristais deste sistema, a de
apresentarem ao menos um eixo binário de simetria. Possuem três eixos cristalográficos
perpendiculares entre si, todos com comprimentos diferentes.
25
Figura 15: Estrutura Ortorrômbica C, obtida a partir do comando: final 5 1
Esse tipo de rede de Bravais é conhecida como ortorrômbica C. Ela apresenta
somente pontos reticulares nas bases. Assim como na ortorrômbica simples ela produz
estruturas de grande complexidade tendo como característica comum a todos os cristais
desse sistema, a de apresentarem ao menos um eixo binário de simetria. Possuem três
eixos cristalográficos perpendiculares entre si, todos com comprimentos diferentes.
26
Figura 16: Estrutura Ortorrômbica I, obtida a partir do comando:final 6 1
Esse tipo de rede de Bravais é conhecida como ortorrômbica de corpo centrado,
também chamada de ortorrômbica I. Ela apresenta além dos pontos que determinam os
vértices, um ponto reticular no centro da célula. Assim como na ortorrômbica simples ela
produz estruturas de grande complexidade tendo como característica comum a todos os
cristais deste sistema, a de apresentarem ao menos um eixo binário de simetria. Possuem
três eixos cristalográficos perpendiculares entre si, todos com comprimentos diferentes.
27
Figura 17: Estrutura Ortorrômbica F, obtida a partir do comando:final 7 1
Esse tipo de rede de Bravais é conhecida como Ortorrômbica de face centrada,
sendo também denominada ortorrômbica F. Ela apresenta pontos reticulares nas faces para
além dos localizados nos vértices. Assim como na ortorrômbica simples e de corpo centrado
ela produz estruturas de grande complexidade, tendo como característica comum a todos os
cristais desse sistema, a de apresentarem, ao menos, um eixo binário de simetria. Possuem
três eixos cristalográficos perpendiculares entre si, todos com comprimentos diferentes.
28
Figura 18: Estrutura Tetragonal P, obtida a partir do comando: final 8 1
Essa rede de Bravais é conhecida como rede tetragonal simples também chamada
de tetragonal P. Nessa rede todos os pontos reticulares estão localizados nos vértices do
paralelepípedo que constitui a célula. Todos os cristais desse sistema têm a característica
de possuírem, para além de um eixo quaternário de simetria, três eixos cristalográficos
perpendiculares entre si, sendo os dois horizontais de igual comprimento e o vertical de
comprimento diferente.
29
Figura 19: Estrutura Tetragonal I, obtida a partir do comando: final 9 1
Esse tipo de rede de Bravais é conhecida como tetragonal de corpo centrado podendo
também ser denominada tetragonal I. Ela apresenta além dos pontos que determinam os
vértices, um ponto reticular no centro da célula. Todos os cristais deste sistema têm a
característica de possuírem, para além de um eixo quaternário de simetria, três eixos
cristalográficos perpendiculares entre si, sendo os dois horizontais de mesmo comprimento
e o vertical de comprimento diferente.
4 – CONCLUSÃO
O software foi criado com sucesso, porém em conseqüência do aumento na
quantidade de parâmetros do programa tornou-se inviável a construção de cinco das catorze
redes que representam as estruturas cristalinas dos sólidos em três dimensões.
Assim ocorreu apenas a criação de nove estruturas, que possuíam como
característica principal o fato de se tratarem de estruturas simples e lineares com os eixos
30
cristalográficos perpendiculares entre si, sendo elas pertencentes aos sistemas cristalinos
cúbico, tetragonal e ortorrômbico.
Durante a confecção do software houve uma mudança de metodologia, pois os
resultados obtidos não haviam sido satisfatórios, e também pela extensão do programa, o
que estava gerando um aumento no tempo de processamento. Com isso, verificou-se que
construindo uma célula unitária e transladando a mesma nos eixos obtinha-se bons
resultados, além de uma melhor performance do programa.
O Software foi produzido em ambiente Linux, utilizando a linguagem C e a biblioteca
MESA, sendo necessária, com isso, a criação de um executável para que o software fosse
visualizado também em ambiente Windows.
A fim de que o usuário não encontrasse dificuldades em utilizar o software, devido
essencialmente à existência dos parâmetros de entrada – os quais devem ser inseridos
através de uma linha de comando executada no Prompt de Comando – foi criado um
manual para auxiliá-lo quanto à utilização do mouse e do teclado na realização da
translação, rotação e aproximação da estrutura.
O executável inviabilizou a possibilidade de deixar o software visual disponível na
internet. Assim a próxima etapa do projeto seria a criação de um applet, que seria feito
através da linguagem de programação JAVA, facilitando a utilização do software por parte
do usuário, visto que se pode criar botões e caixas de opções, auxiliando na mudança dos
parâmetros.
5 – AGRADECIMENTOS
Gostaria de agradecer inicialmente a Deus, pois sem ele não conseguiria as forças
necessárias para superar os momentos difíceis que surgiram na busca por esse objetivo.
Não podendo esquecer da minha família que apesar de todas as dificuldades financeiras
encontradas nesse período nunca deixou que eu desistisse de alcançar esse sonho; a
minha namorada Juliana que sempre esteve junto comigo nos momentos bons e ruins; aos
colegas do M-226, onde não posso esquecer de citar o amigo e parceiro de Iniciação
Cientifica, Eduardo Xavier Seimetz, o qual devido ao maior tempo de convivência se tornou
uma espécie de irmão. E finalmente ao Prof. Dr. Paulo Eduardo de Brito que me orientou
não apenas nesse trabalho de conclusão de curso, mas também em dois outros projetos de
iniciação científica. Com ele pude compreender muitos fenômenos físicos interessantes,
porém o seu principal ensinamento que ficou demonstrado através das suas ações e pode
ser traduzido em uma frase de Albert Einstein, que dizia o seguinte: “trabalhe com aquilo
que você gosta que o seu trabalho se tornará uma diversão”.
31
6 – REFERÊNCIAS BIBLIOGRÁFICAS
BARROS, Alexandre. Quântica e a Ciência dos Materiais. Disponível em: <http://www.comciencia.br/reportagens/fisica/fisica12.htm>. Acesso em: 13 ago. 2005. BRITO JÚNIOR, Agostinho de Medeiros. Introdução à computação gráfica com OpenGL. Disponível em: <www.dca.ufrn.br/~ambj/opengl>. Acesso em: 27 jun. 2005. FAZZIO, Adalberto. Disponível em: <http://macbeth.if.usp.br/~fazzio/Aula02-B.ppt#466,4,Slide 4>. Acesso em: 20 jul. 2005. GAELZER, Rudi. Física do Estado Sólido. Disponível em: <http://minerva.ufpel.edu.br/~rudi/grad/EsMa/Apostila/CapIV.pdf>. Acesso em: 16 jul. 2005. HINKEL, N.; ROCHA, Sebastião; ANGRENSE. Estrutura Cristalina. Disponível em: <http://pt.wikipedia.org/wiki/Estrutura_cristalina#Grupos_pontuais_e_espaciais>. Acesso em: 25 ago. 2005. ______. Rede de Bravais. Disponível em: <http://pt.wikipedia.org/wiki/Redes_de_Bravais>. Acesso em: 25 ago. 2005. KITTEL, C. Introdução à Física do Estado Sólido. 5. ed. Rio de Janeiro: Guanabara Dois S. A., 1978, 1: 3-34. MANSSOUR, Isabel Harb. Introdução à OpenGl. Disponível em: <http://www.inf.pucrs.br/~manssour/OpenGL/>. Acesso em: 11 mai. 2005. MARTINS, Daniel. et al. Programa de Aprimoramento Discente em Modelagem Geométrica. Disponível em: <www.mat.ufmg.br/padmod/cursodeopengl.htm>. Acesso em: 27 jun. 2005. TIPLER, Paul A.; LIEWELLYN, Ralph A. Física Moderna. Rio de Janeiro: LTC Livros Técnicos e Científicos Editora S.A., 2000, 10: 287-293. Tutorial de OpenGl. Disponível em: <www.ingleza.com.br/opengl>. Acesso em: 26 jun. 2005. WRIGHT, Richard S. Jr.; SWEET, Michael. OpenGL SuperBible. 2nd ed. Indiana: Waite Group Press, 2000. 696 p.
32
ANEXOS
33
Anexo I : Manual do Software Visual das Estruturas Cristalinas dos Sólidos em Três Dimensões Pré-requisitos
• Arquivo glut32.dll na pasta: C:\WINDOWS\system Será necessário fazer o download do arquivo contido no disket em anexo:
• final.exe Obs:Ao fazer download do arquivo verificar local de gravação: Ex: c:\tcc Inicialmente será necessário abrir o prompt de comando, o que poderá ser feito de duas formas: 1 - Assim para executar o programa será necessário clicar no botão iniciar do Windows e ir na opção executar: 1.1 - No campo abrir, digite cmd e clique no botão “OK” Uma outra forma seria: 2-Clicar com o botão esquerdo do mouse nos botão iniciar do Windows e em seguida nos link programas→acessórios→prompt de comando, conforme a figura abaixo:
34
3 – Com isso, abrirá o Prompt de comando
35
4 - Entre no diretório onde o arquivo final.exe se encontra. digitando o seguinte comando: 4.1-Se o arquivo estiver no c: cd\pasta Exemplo:o arquivo se encontra no diretório c: na pasta tcc cd\tcc e logo após tecle “ENTER”; 4.2-Caso o arquivo final.exe se encontre em outro diretório: Diretório: cd pasta Exemplo: O arquivo final.exe se encontra no diretório a: na pasta tcc a: e logo após tecle “ENTER”; cd tcc e logo após tecle “ENTER”; 5 - Para verificar se os arquivos realmente estão na pasta digite o comando: dir e logo após tecle “ENTER”; 6 - Se aparecer o arquivo final.exe é só digitar o comando: final a b →→→→ onde a e b são parâmetros do programa, que estão definidos nos exemplos abaixo:
• O parâmetro ‘a’ define a estrutura a ser visualizada:
a Estrutura a ser visualizada 1 Cúbica Simples 2 Cúbica de Face Centrada 3 Cúbica de Corpo Centrado 4 Ortorrômbica Simples 5 Ortorrômbica C 6 Ortorrômbica de Corpo Centrado 7 Ortorrômbica de Face Centrada 8 Tetragonal Simples 9 Tetragonal de Corpo Centrado
• O parâmetro ‘b’ define o tamanho da estrutura a ser visualizada:
Tamanho da estrutura = b² Exemplo: Para b=2 Tamanho da estrutura = 2² = 4(células unitárias) Após o usuário ter escolhido os parâmetros desejados, conforme o exemplo: final 3 2, tecle “ENTER”. E com isso será visualizada a seguinte tela:
36
Funcionalidades do mouse e do teclado
- Rotação no eixo z
- Rotação no eixo x
- Rotação no eixo y
- Translação no eixo z
- Translação no eixo x
- Translação no eixo y
Aproximação da câmera ao objeto.
- Fecha o programa - Volta para a condição inicial
37
Anexo II : Algoritmo: Software visual das estruturas cristalinas dos sólidos em três dimensões. //1-Comandos para criar uma janela: int main(int argc, char** argv) { if (argc>1) opcao = atoi(argv[1]); /*Parâmetro que irá definir a estrutura a ser visualizada*/ if (argc>2) n = atoi(argv[2]); /*Parâmetro que irá definir o tamanho da rede*/ glutInit(&argc, argv); /*Iniciar a biblioteca GLUT*/ glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB ); /*Iniciar os padrões de cores*/ glutInitWindowSize(largura,altura); /*Tamanho da Janela*/ glutinitWindowPosition(posição X,posição Y); /* Posição da Janela*/ glutCreateWindow(“ESTRUTURA CRISTALINA”); /*Cria a Janela*/ glutKeyboardFunc(teclado); /*Chama a função Keyboard*/ glutMouseFunc(mouse); /*Chama a função Mouse*/ init (); /*Chama a função init()*/ glutDisplayFunc(objeto); /*Chama a função Display*/ glutReshapeFunc(reshape); /*Chama a função Reshape*/ glutMainLoop(); return 0; } void objeto(void) { //2-Criar um espaço de Visualização glMatrixMode(GL_PROJECTION); /*Define qual matrix será alterada daí para a frente sendo a projection indicada para definir o volume de visualização*/ glLoadIdentity(); /*Serve para transformar a atual pilhas de matrix em identidade*/ gluPerspective(angulo,distorção,perto, longe); /*Define o volume de visualização com a forma de um tronco de pirâmide sendo os parâmetros de entrada*/ glMatrixMode(GL_MODELVIEW); /*Define qual matrix será alterada daí para a frente sendo a modelview indicada para o desenho e posicionamento da câmara*/ glLoadIdentity(); /*Serve para transformar a atual pilhas de matrix em identidade*/ glClear(GL_COLOR_BUFFER_BIT); /*Limpa o fundo da janela*/ gluLookAt(posição da câmera (olhox, olhoy, olhoz); objeto (pontox, pontoy, pontoz); normal a câmera (normalx, normaly, normalz)); /*Define aonde a câmera estará e para onde ela estará apontando*/ //4-Criando a figura glBegin(parametro); /*Inicializa a construção da figura ,Esse parâmetro ira definir quais tipos de primitivas que serão desenhadas exemplos:GL_POINTS,GL_LINES,GL_QUADS,GL_TRIANGLE,GL_POLYGON*/ glColor3f(vermelho,verde,azul); /*Seletor de cores do sistema de desenho*/ glVertex3f(posição x,posição y, posição z);/*Recebe os vértices que irão determinar a estrutura*/ glEnd(); /*Finaliza a construção da figura*/ } //5-Define as funções que serão realizadas pelo mouse. Void mouse() { switch(tecla) { case GLUT_LEFT_BUTON: /*Definindo uma função para o botão esquerdo do mouse*/ if (estado==GLUT_DOWN) /*Definindo o estado “acionado” especifico para o botão*/ função qualquer; /*Função relaçionada ao acionamento da tecla*/ glutPostRedisplay(); /*A cena será redesenhada através dessa função*/ break; default: break;
38
} } //6-Define as funções que serão realizadas pelo teclado. void teclado(unsigned char tecla, int x , int y) { switch(tecla) { case ’x’ /*Definindo uma função para a tecla ‘x’ do teclado*/ função qualquer; /*A função relaçionada ao acionamento da tecla*/ glutPostRedisplay(); /*Função responsável por redesenhar a cena*/ break; default; break; } } void reshape(int x , int y) { glViewport(0,0,x,y); /*Define onde na tela será redenrizada a imagem*/ glMatrixMode(GL_PROJECTION); /*Define qual matrix será alterada daí para a frente sendo a projection indicada para definir o volume de visualização*/ glLoadIdentity(); /*Serve para transformar a atual pilhas de matrix em identidade*/ }
39
Anexo III : Programa: final.c //Define as bibliotecas utilizadas no programa #include <stdio.h> #include <stdlib.h> //#include <GL/glu.h> #include <GL/glut.h> #include <math.h> #include "nrutil.h" #include "nrutil.c" #include "estrutura.c" #define pi 3.1415926535897932385 //Define as constantes e as variáveis iniciais utilizadas no programa GLint i,j,k,opcao=1; GLint alfa=pi/2,beta=pi/2,gama=pi/2; GLint n=2,cam,mudaCurva=0,altura,largura; GLfloat angulo,fAspect,thetax=0,thetay=0,thetaz=0,vx=0,vy=0,vz=0; //Função inicio, que define alguns parâmetros para determinar as condições iniciais, como: void init(void) { //Define as parâmetros que serão utilizados na definição da propriedade da luz GLfloat ambiente[] ={ 0.2, 0.2, 0.2, 1.0 }; GLfloat difusa[] ={ 0.7, 0.7, 0.7, 1.0 }; GLfloat especular[] ={ 1.0, 1.0, 1.0, 1.0 }; // GLfloat posicao[] = { 0.0, 3.0, 2.0, 0.0 }; GLfloat posicao[] = { 0.0, 3.0, 3.0, 0.0 }; //Define a cor utilizada no fundo da janela de visualização glClearColor (0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); //Define as propriedades da luz glLightfv(GL_LIGHT0,GL_AMBIENT,ambiente); glLightfv(GL_LIGHT0,GL_POSITION,posicao); glLightfv(GL_LIGHT0,GL_DIFFUSE,difusa); glLightfv(GL_LIGHT0,GL_SPECULAR,especular); //Habilita a luz glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); //Habilita a cor do material glEnable(GL_COLOR_MATERIAL); fAspect=1; cam=8.0; angulo=45; thetax=0;thetay=0;thetaz=0; vx=0;vy=0;vz=0; } //Função objeto, define as características do objeto void objeto(void) { //Definição dos parâmetros que serão utilizados no Contador que ira definir o objeto int i,j,k; //Define os parâmetros que serão utilizados na definição da propriedade do material GLfloat mdifusa[]={0.7,0.7,0.7,1.0}; GLfloat mambiente[]={0.2,0.2,0.2,1.0}; GLfloat mbrilho=20.0;
40
GLfloat mespecular[]={1.0,1.0,1.0,1.0}; //Define espaço do desenho e posicionamento da câmara glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f (1.0, 0.0, 0.0); glLoadIdentity (); gluLookAt (cam,0.0,0.0,0.0,0.0,0.0 , 0.0, 0.0, 1.0); //Define as funções que serão utilizadas para rotacionar e transladar o objeto glRotatef(thetax,1,0,0); glRotatef(thetay,0,1,0); glRotatef(thetaz,0,0,1); glTranslatef(vx,vy,vz); //Construção dos eixos x , y e z glDisable(GL_LIGHTING); glPushMatrix(); glTranslatef(-3.5,-3.5,-3.5); glColor3f(1,1,1); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(1,0,0); glEnd(); glRasterPos3f(1.5,0,0); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, 'x'); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(0,1,0); glEnd(); glRasterPos3f(0,1.5,0); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, 'y'); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(0,0,1); glEnd(); glRasterPos3f(0,0,1.5); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, 'z'); glPopMatrix(); glEnable(GL_LIGHTING); //Propriedades do material quanto a utilização de luz glMaterialfv(GL_FRONT,GL_DIFFUSE,mdifusa); glMaterialfv(GL_FRONT,GL_AMBIENT,mambiente); glMaterialf(GL_FRONT,GL_SHININESS,mbrilho); glMaterialfv(GL_FRONT,GL_SPECULAR,mespecular); //Exporta o programa estrutura.c para definição da estrutura a ser visualizada for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) estrutura(opcao,i,j,k); glFlush (); } //Define o redimensionamento da janela e o espaço de visualização void reshape (int w, int h)
41
{ glViewport (0, 0, (GLsizei) w, (GLsizei) h); //Define qual matrix será alterada daí para a frente sendo a projection indicada para definir o volume de visualização glMatrixMode (GL_PROJECTION); //Serve para transformar a atual pilhas de matrix em identidade glLoadIdentity (); //Define o volume de visualização com a forma de um tronco de pirâmide sendo os parâmetros de entrada (angulo,distorção,perto, longe) gluPerspective(angulo, fAspect, 0.10, 500.0); //Define qual matrix será alterada daí para a frente sendo a modelview indicada para o desenho e posicionamento da câmara glMatrixMode (GL_MODELVIEW); glLoadIdentity (); } //Função mouse, define as funções que serão realizadas pelo mouse. void mouse (int button, int state, int x, int y) { //Botão esquerdo aproxima o objeto da câmera. switch (button){ case GLUT_RIGHT_BUTTON: if (state==GLUT_UP) cam = cam + 0.5; glutPostRedisplay(); break; //Botão do meio volta para a condição inicial da câmera. case GLUT_MIDDLE_BUTTON: if (state==GLUT_DOWN) glutIdleFunc(init()); break; //Botão direito, afasta o objeto da câmera. case GLUT_LEFT_BUTTON: cam = cam - 0.5; glutPostRedisplay(); break; default: break; } } //Função teclado, define a função que será realizada pelo teclado. void teclado(unsigned char tecla, int x, int y) { switch (tecla) { //tecla “A ou a” rotaciona o objeto no eixo x em 1 grau case 'A':
case 'a': thetax += 1; break; //tecla “S ou s” rotaciona o objeto no eixo y em 1 grau case 'S':
case 's': thetay += 1; break; //tecla “D ou d” rotaciona o objeto no eixo z em 1 grau
case 'D': case 'd':
thetaz += 1; break; //tecla “Z ou z” rotaciona o objeto no eixo x em -1 grau
case 'Z': case 'z':
42
thetax -= 1; break; //tecla “X ou x” rotaciona o objeto no eixo y em -1 grau case 'X':
case 'x': thetay -= 1; break; //tecla “C ou c” rotaciona o objeto no eixo z em -1 grau
case 'C': case 'c':
thetaz -= 1; break; //tecla “H ou h” translada o objeto no eixo x em + 0.1 da sua posição
case 'H': case 'h':
vx += 0.1; break; //tecla “J ou j” translada o objeto no eixo y em + 0.1 da sua posição
case 'J': case 'j': vy += 0.1; break; //tecla “K ou k” translada o objeto no eixo z em + 0.1 da sua posição
case 'K': case 'k': vz += 0.1; break; //tecla “B ou b” translada o objeto no eixo x em - 0.1 da sua posição
case 'B': case 'b': vx -= 0.1; break; //tecla “N ou n” translada o objeto no eixo y em - 0.1 da sua posição
case 'N': case 'n': vy -= 0.1; break; //tecla “M ou m” translada o objeto no eixo z em - 0.1 da sua posição
case 'M': case 'm':
vz -= 0.1; break; //tecla “O ou o” retorna a condição inicial
case 'O': case 'o':
init(); break; case 27: //tecla “Q ou q” fecha a janela case 'Q': case 'q': exit(0); break; } glutPostRedisplay(); }
43
//Função Principal int main(int argc, char** argv) { if (argc>1) opcao = atoi(argv[1]); if (argc>2) n = atoi(argv[2]); glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow ("ESTRUURAS CRISTALINAS DOS SOLIDOS EM TRÊS DIMENSÕES"); glutKeyboardFunc(teclado); glutMouseFunc(mouse); init (); glutDisplayFunc(objeto); glutReshapeFunc(reshape); glutMainLoop(); return 0; }
44
Anexo IV: Programa: estrutura. c //Função bola,descreve a criação e o posicionamento das esferas void bola(float raio,GLfloat x1,GLfloat y1,GLfloat z1) { glTranslatef(x1,y1,z1); glutSolidSphere(raio,10,10); glTranslatef(-x1,-y1,-z1); } // Função estrutura, define todas as estruturas que serão exportadas para o programa final.c void estrutura(int opcao,GLfloat x1,GLfloat y1,GLfloat z1) { switch (opcao){ case 2: //Cúbica Face Centrada ou FCC glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1,z1+1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1+1); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1,z1); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,1,0); bola(0.10,1,1,0); bola(0.10,0,0,1); bola(0.10,1,0,1); bola(0.10,0,1,1); bola(0.10,1,1,1); glColor3f(0.33,1,0); bola(0.10,0.5,0.5,0.0); bola(0.10,0.0,0.5,0.5); bola(0.10,0.5,0.0,0.5); bola(0.10,0.5,1.0,0.5); bola(0.10,1.0,0.5,0.5); bola(0.10,0.5,0.5,1.0); glTranslatef(-x1,-y1,-z1); glPopMatrix(); glPopMatrix(); break;
45
case 3: // Cúbica de Corpo Centrado ou BCC glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1,z1+1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1+1); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1,z1); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,1,0); bola(0.10,1,1,0); bola(0.10,0,0,1); bola(0.10,1,0,1); bola(0.10,0,1,1); bola(0.10,1,1,1); glColor3f(0.33,1,0); bola(0.10,0.5,0.5,0.5); glTranslatef(-x1,-y1,-z1); glPopMatrix(); glPopMatrix(); break; case 4: //Ortorrômbica simples glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1*0.5,z1*0.7);
46
glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,0.5,0); bola(0.10,1,0.5,0); bola(0.10,0,0,0.7); bola(0.10,1,0,0.7); bola(0.10,0,0.5,0.7); bola(0.10,1,0.5,0.7); glTranslatef(-x1,-y1*0.5,-z1*0.7); glPopMatrix(); glPopMatrix(); break; case 5: // Ortorrômbica C glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1*0.5,z1*0.7); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,0.5,0); bola(0.10,1,0.5,0); bola(0.10,0,0,0.7); bola(0.10,1,0,0.7); bola(0.10,0,0.5,0.7); bola(0.10,1,0.5,0.7); glColor3f(0.33,1,0); bola(0.10,0.5,0.25,0.0); bola(0.10,0.5,0.25,0.7); glTranslatef(-x1,-y1*0.5,-z1*0.7); glPopMatrix(); glPopMatrix(); break; case 6: // Ortorrômbica de Corpo Centrado glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7);
47
glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1*0.5,z1*0.7); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,0.5,0); bola(0.10,1,0.5,0); bola(0.10,0,0,0.7); bola(0.10,1,0,0.7); bola(0.10,0,0.5,0.7); bola(0.10,1,0.5,0.7); glColor3f(0.33,1,0); bola(0.10,0.5,0.25,0.35); glTranslatef(-x1,-y1*0.5,-z1*0.7); glPopMatrix(); glPopMatrix(); break; case 7: // Ortorrôbica de Face Centrada glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5,z1*0.7); glVertex3f(x1,y1*0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5,z1*0.7); glVertex3f(x1+1,y1*0.5,z1*0.7+0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7); glVertex3f(x1,y1*0.5+0.5,z1*0.7+0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7); glVertex3f(x1+1,y1*0.5+0.5,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1*0.5,z1*0.7); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,0.5,0); bola(0.10,1,0.5,0); bola(0.10,0,0,0.7);
48
bola(0.10,1,0,0.7); bola(0.10,0,0.5,0.7); bola(0.10,1,0.5,0.7); glColor3f(0.33,1,0); bola(0.10,0.5,0.25,0.0); bola(0.10,0.0,0.25,0.35); bola(0.10,0.5,0.0,0.35); bola(0.10,0.5,0.5,0.35); bola(0.10,1.0,0.25,0.35); bola(0.10,0.5,0.25,0.7); glTranslatef(-x1,-y1*0.5,-z1*0.7); glPopMatrix(); glPopMatrix(); break; case 8: // Tetragonal Simples glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1+1,z1*0.7); glVertex3f(x1+1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1,z1*0.7); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,1,0); bola(0.10,1,1,0); bola(0.10,0,0,0.7); bola(0.10,1,0,0.7); bola(0.10,0,1,0.7); bola(0.10,1,1,0.7); glTranslatef(-x1,-y1,-z1*0.7); glPopMatrix(); glPopMatrix(); break; case 9: // Tetragonal de Corpo Centrado glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1+1,z1*0.7);
49
glVertex3f(x1+1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1,y1,z1*0.7); glVertex3f(x1,y1,z1*0.7+0.7); glVertex3f(x1+1,y1,z1*0.7); glVertex3f(x1+1,y1,z1*0.7+0.7); glVertex3f(x1,y1+1,z1*0.7); glVertex3f(x1,y1+1,z1*0.7+0.7); glVertex3f(x1+1,y1+1,z1*0.7); glVertex3f(x1+1,y1+1,z1*0.7+0.7); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1,z1*0.7); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,1,0); bola(0.10,1,1,0); bola(0.10,0,0,0.7); bola(0.10,1,0,0.7); bola(0.10,0,1,0.7); bola(0.10,1,1,0.7); glColor3f(0.33,1,0); bola(0.10,0.5,0.5,0.35); glTranslatef(-x1,-y1,-z1*0.7); glPopMatrix(); glPopMatrix(); break; default: // Cúbico Simples glPushMatrix(); glColor3f(1.0,1.0,1.0); glPushMatrix(); glBegin(GL_LINES); glLineWidth(2); glVertex3f(x1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1,y1,z1+1); glVertex3f(x1,y1,z1); glVertex3f(x1,y1,z1+1); glVertex3f(x1+1,y1,z1); glVertex3f(x1+1,y1,z1+1); glVertex3f(x1,y1+1,z1); glVertex3f(x1,y1+1,z1+1); glVertex3f(x1+1,y1+1,z1); glVertex3f(x1+1,y1+1,z1+1); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(x1,y1,z1); glColor3f(1,1,1); bola(0.10,0,0,0); bola(0.10,1,0,0); bola(0.10,0,1,0); bola(0.10,1,1,0); bola(0.10,0,0,1); bola(0.10,1,0,1);
50
bola(0.10,0,1,1); bola(0.10,1,1,1); glTranslatef(-x1,-y1,-z1); glPopMatrix(); glPopMatrix(); }
Top Related