Inclusão de novas bibliotecas

O próximo passo foi introduzir as bibliotecas ODE e CppUnit. Com isso, as classes Environment (e suas subclasses) e Molecule perderam o comportamento físico, passando apenas a adaptadoras entre as diversas bibliotecas utilizadas. As subclasses de Environment passaram a ter o papel de inserir no ambiente físico gerenciado pela ODE os planos de colisão necessários para modelar a forma do ambiente de difusão desejada.

A integração com a biblioteca CppUnit não trouxe muitos problemas. Entretanto, a biblioteca ODE exigiu o ajuste de alguns parâmetros referentes à conservação de energia, uma vez que, mesmo definindo o coeficiente de elasticidade das colisões para $1.0$, ou seja, definindo que as colisões deveriam ser perfeitamente elásticas, havia perda de energia no sistema. Foi necessário definir um coeficiente de elasticidade maior do que $1.0$ para que houvesse conservação de energia, excetuando-se erros de arredondamento menores do que $10^{-3}$ unidades de energia.

Outro problema relacionado à utilização da biblioteca ODE foi a necessidade de modelar os ambientes de difusão como intersecção de planos. Até a introdução desta biblioteca, a borda do ambiente esférico era calculada com exatidão, por meio da equação implícita da esfera: $\sqrt{x^2 + y^2 + z^2} = r$, onde $r$ é o raio da esfera. Com a introdução da biblioteca, foi necessário utilizar a seguinte parametrização:


\begin{displaymath}
\left\{ \begin{array}{l}
x(u, v) = r \cos (u) \cos (v)\\ 
...
...{2}, \frac{\pi}{2})\\
v \in [0, 2\pi)
\end{array}
\right.
\end{displaymath} (6)

A partir desta parametrização, é possível calcular o vetor normal à esfera em um ponto qualquer de sua superfície. Com o vetor normal, define-se, então, um plano. Porém, como o número de planos necessários para representar uma esfera com perfeição é infinito e não é possível inserir infinitos planos na memória do computador, faz-se necessário aproximar a esfera por um número finito de planos. Para tanto, foi utilizado o seguinte algoritmo:

  1. Sejam $\delta \phi = \frac{2 \pi}{\Phi}$, $\delta \theta = \frac{2 \pi}{\Theta}$
  2. Para $\phi$ de $0$ a $\pi$ passo $\delta \phi$
    1. Sejam $C_{\phi} = \cos (\phi)$, $c = \sin (\phi)$
    2. Para $\theta$ de $0$ a $2 \pi$ passo $\delta \theta$
      1. Sejam $a = C_{\phi} \cos(\theta)$, $b = C_{\phi} \sin(\theta)$
      2. Seja $v = (-a, -b, -c)$
      3. Normalize $v$
      4. Adicione no espaço o plano com a equação $v_xx + v_yy + v_zz - r = 0$, onde $r$ é o raio da esfera

$\Phi$ e $\Theta$ determinam o número de planos que serão utilizados para aproximar a esfera. Quanto maiores seus valores, mais planos são utilizados.

Feita a integração com as bibliotecas, o foco foi melhorar a exibição da simulação. Neste ponto, foram introduzidas, gradualmente, diversas funcionalidades. A primeira delas foi permitir que o usuário escolhesse as cores das moléculas na tela.

Luiz Fernando Oliveira Corte Real 2008-11-28