Arquivo da tag: QT

Sobre estereologia, OpenGL, PhysX e CUDA

Eu estava pensando nesse post há um bom tempo. Falar um pouco do meu TCC. A idéia por trás de todo esse trabalho é um área interdisciplinar conhecida por estereologia. Sendo bem direto, o objetivo da estereologia é a interpretação tridimensional (3D) de uma imagem plana (2D). Ela provê tecnicas para extrair informação quantitativa sobre materiais 3D à partir de medições feitas em seções planares. Ela é uma importante ferramenta para a microscopia particularmente o estudo do petróleo, histologia, neuroanatomia e ciência dos materiais. Entre suas aplicações, posso citar o estudo da composição de materiais rígidos, determinação de volume, superfície à partir de simples seções bidimensionais de uma estrutura.

Imagine que você deseja estudar a composição de um metal, cristal ou de um tecido de algum orgão animal ou vegetal. Para isso, você tem uma lâmina retangular, suficientemente grande e bem fina para transpor o objeto que você deseja estudar. Imagina então que depois que você retirar a lâmina, ela conterá imagens de todas as intersecções alcançadas, por exemplo, se a estrutura que está sendo estudada é composta por pequenos corpos totalmente esféricos, quando nosso plano de corte transpor o objeto em estudo e for retirado ele terá registros de instersecções circulares. As seguintes imagens exemplificam:

  1. Considere uma rocha, com um formato cúbico. Considere então que as estruturas internas (pequenas esferas) sejam os elementos que a compõe.

2.  Agora considere o corte em algum ponto da rocha pela lâmina (plano de corte, como é mais conhecido):

3. Agora apenas os objetos interceptados pela lâmina de corte (plano de corte) são considerados:

4) Agora, para as esferas interceptadas o plano de corte obtem as regiões interceptadas. Neste caso, apenas esferas compõe a estrutura portanto as regiões interceptadas serão círculos.

Os dados finais que irão inferir os parâmetros tridimensionais da estrutura original são deduzidos à partir de várias informações bidimensionais coletadas por vários planos diferentes. Este exemplo é simples, foi apenas demonstrado esferas. Estruturas reais são muito mais complexas,  como no caso do metal duro (explicado mais adiante) onde são encontrados componentes em forma de prismas triangulares e prismas triangulares truncados resultando em polígonos quando interceptados pelo plano de corte, onde exigiu um pouco mais de pesquisa em geometria computacional.

Simulações computacionais tem lá seus prós e contras. O grande ponto positivo, é que, dado um evento real não observável à olho nú e as variáveis que o condicionam, uma simulação computacional permite um estudo sobre o mesmo sem grandes necessidade imediata de investimento em laboratórios e maquinário científico. O ponto negativo, é que o modelo representado por uma computação é aproximado. Você sempre estará limitado numericamente, há uma perda de aproximação da transição de um modelo matemático para um computacional. Entretanto, com o advento de CPU’s multicore e unidades de processamento gráficas de propósito geral (GPU) as simulações são levadas à um outro nível de acurácia em seus resultados, principalmente ao levar em conta o nível microscópico dos objetos de estudo da estereologia. É impraticável, enfadonho e susceptível ao erro todo o processo manual baseado em observações microscópicas. Aí está a justificativa para este trabalho.

O metal duro é o material compósito constituído de uma fase dura dispersa em uma fase dúctil. A fase dura consiste em grãos de carbeto de tungstênio (WC) e a fase dúctil e ligante é constituída, principalmente, por cobalto (Co), entretanto níquel e ferro também podem ser utilizados. A grande sacada de estudar e construir materiais compósitos é a combinação de várias características dos elementos compositores. Como resultado disto (WC + Co), é obtido um material que combina boa resistência à fratura e alta dureza a temperaturas elevadas. Quanto às aplicações, o metal duro apresenta diversas. Sendo que as ferramentas de corte constituem a principal aplicação. Uma aplicação especial do metal duro, produzido com pós finos ou ultrafinos, envolvendo grandes quantidades de carbeto cementado, está na produção de brocas para a realização de furos (muito pequenos) em placas de circuitos impressos para computadores e na indústria  de eletrônicos. Para este propósito, novas composições de metal duro, baseadas em carbetos com granulações extremamente finas têm sido desenvolvidas.

Em 2006, um trabalho desenvolvido por um doutorando pela UENF desenvolveu uma simulação com esse objetivo. O grande problema foi  que a biblioteca de simulação física utilizada não permitia uma simulação realista do metal duro, o máximo atingido era um bloco de metal duro composto por 500 elementos compósitos (Wc e Co). O que não chega muito próximo da realidade. Minha implementação vai além disso, além de utilizar algumas ferramentas que permitiram a paralelização de alguns algoritmos rodando em uma Geforce 9600 Gt.

O Objetivo final, é a implementação de rotinas estereológicas em grãos de metal duro através de uma simulação computacional para enfim comparar os resultados obtidos com os resultados presentes na literatura (estes sim, práticos) e de simulações anteriores para enfim demonstrar o avanço alcançado com uma implementação cujo processamento roda em placas gráficas de propósito geral e de baixo custo.

Anúncios

Deixe um comentário

Arquivado em C++, Computação Gráfica, OpenGL, QT, TCC

Usando QT no meu TCC

Eu acho que isso é digno de nota. Eu estou desenvolvendo o protótipo do meu trabalho de conclusão de curso usando a biblioteca QT, da Trolltech (Atualmente é a Nokia, a responsável pela biblioteca) . A aplicação implementa algumas rotinas estereológicas para determinação de parâmetros tridimensionais básicos (área de superfície, volume, perímetro … ) sobre corpos rígidos em uma simulação 3D em GPU. Antes, a GUI da aplicação era baseado no WxWidgets, mas depois de desenvolver boa parte da aplicação (tanto a GUI quanto a própria “estereologia”) utilizando a dita cuja, eu percebi algumas coisas não muito legais no estilo da biblioteca.  O código não é tão limpo assim, inteligível, é cheio de macros e a OO passou foi longe …. Também não me agradei do suporte à OpenGL, pois não consegui modular meu código de forma adequanda à separar códigos específicos da própria API OpenGL de algumas chamadas necessárias à API do WxWidgets p/, por exemplo,  carregar o contexto do dispositivo OpenGL e assim direcionar todos os comandos gl* e glu* p/ o buffer de visualização …  Isso definitivivamente me afastou de WxWidgets ….. Ah … tem a documentação tb que é uma mer&¨%$#@!

Procurando uma solução topei com a Qt, OpenSource (com algumas diferenças quanto ao licenciamento em relação à WxWidgets) e posso garantir a veracidade do slogan da biblioteca: Code less, Create More, Deploy everywhere! É verdade, e gostei muito do design da própria biblioteca, totalmente OO ! É tão OO que os caras desenvolveram um, digamos, fake-Runtime para reflexão em C++.

Qt abandona a abordagem orientada à #defines do WxWidgets e cerca o desenvolvimento com várias ferramentas auxiliares( Geradores de MakeFiles, projetos p/ VS2008, GUI Builder). A documentação da Qt é enorme, muito bem organizada, clara e vários exemplos atualizados estão disponíveis com código-fonte. A única coisa que não me agradou foi que a atual distribuição do SDK pré-compilado é somente para o MinGW (questões de licenciamento), embora facilmente ( e demoradamente ) você pode gerar as *.lib para o compilador C++ do Visual Studio pois há makefiles para vários compiladores (vários mesmo) junto com o código-fonte do SDK …. Code less, Create More, Deploy everywhere

Deixe um comentário

Arquivado em C++, QT, TCC, Trolltech