# Um nome legal para uma tese de eletrotécnica que fala sobre conciliar física com programação
## Introdução
A física é uma ciência que se presta a descrever a natureza. Neste sentido, várias ferramentas são usadas construindo uma representação compreensível e o mais fidedigna possível da realidade conhecida. Atualmente as principais ferramentas utilizadas são a lógica-matemática, os testes e observações experimentais e a especulação criativa.
Contudo, ao usar a matemática analiticamente temos algumas dificuldades, tais como cenários em que as contas seriam exaustivas ou até mesmo impraticáveis, assim como dificuldades relativas ao ensino-aprendizagem da matéria, dado que muitos estudantes ao se depararem apenas com as contas e equações não conseguem abstrair o significado físico do que se está modelando.
Com simulações e cálculos numéricos computacionais podemos dar conta desses dois grandes problemas, uma vez que com computadores podemos realizar contas, que analiticamente seriam exaustivas, com uma velocidade surpreendente. O processo de produção de simulações e algoritmos que descrevem eventos físicos força o aluno a entender e abstrair o conhecimento necessário para construção dos mesmos.
No primeiro capítulo estabelecemos os princípios básicos da física do eletromagnetismo que devem ser usados no capítulo três para a construção de algoritmos que venham a ser usados para construir simulações. O que se pretende neste caso é discriminar quais são as informações que caracterizam plenamente os entes e fenômenos físicos, a partir dos quais poderemos caracterizar a mecânica caracterizada com algoritmos nas simulações.
O segundo capítulo destina-se a fazer uma revisão teórica do que dispomos em termos de teoria da informação e processamento de dados para a construção e entendimento de algoritmos e simulações, com poderemos estabelecer os paralelos necessários para que os ente e fenômenos físicos sejam expressos em linguagem adequada para a construção dos algoritmos e simulações, como enunciamos anteriormente.
O terceiro capítulo, valendo-se das revisões de física e teoria da informação dos capítulos anteriores, é dedicado a trabalhar as dificuldades da construção de simulações computacionais e nos oferecer de maneira embrionária um modelo do real.
O uso dessa abordagem em conjunto com as demais ferramentas indica ser bastante útil principalmente para transmissão de conhecimentos, e estruturação de raciocínios. De certa maneira estaremos construindo uma realidade simulada e comparando com a habitual, e quanto mais parecidas forem os resultados obtidos mais coerente com a realidade que vivenciamos serão os nossos modelos.
Com efeito, a confecção de algoritmos nos possibilita facilitar a compreensão tanto de quem está construindo a simulação, quando de quem terá acesso aos códigos, podendo, desta forma, ser usado inclusive em salas de aulas para estimular o aprendizado da física numa perspectiva de construção de conhecimento, um pouco diferente da simples abordagem de solução de problemas.
## Desenvolvimento
### Capítulo 1 - Elementos das Formulações Mecânicas do Eletromagnetismo Clássico
A física se refere a caracterizar o comportamento de sistemas em função das condições em que está colocado, neste sentido conhecemos três formulações mecânicas pelas quais pode ser construída a determinações dos sistemas físicos, são elas: por meio das forças, das energias ou dos campos. De maneira extremamente sumária trataremos de cada uma destas maneiras.
Contudo, a despeito da formulação adotada é necessário especificar como delimitar os sistemas físicos, em suma se refere a estabelecer todas as características mínimas necessárias para construir um sistema que reproduza o comportamento dos sistemas físicos que possa ser corroborado em testes observacionais ou experimentais.
O modelo mais simples de um sistema físico é o de partículas pontuais, trata-se de um sistema cujas dimensões espaciais são irrelevantes, e como consequência pode ser tratado como um ponto tão somente. A evolução deste modelo passa a considerar tanto as dimensões espaciais como as possibilidades de deformação nestas dimensões (os casos de corpos rígidos, meios elásticos ou fluídos, por exemplo).
Para o estofo deste trabalho podemos nos limitar ao estudo de pontos materiais sem qualquer prejuízo. Esta acepção é a que iremos designar como partícula.
#### Formulação de Interações (Forças)
Uma formulação mecânica é um conjunto de regras que são usadas para construir as equações dinâmicas de um sistema físico, no caso da formulação de forças estas regras são as Leis de Newton e as Leis de Interações.
A partícula para nós é um objeto que pode ser descrito através de propriedades físicas. Dentre as propriedades de uma partícula temos sua posição, relativa a um referencial inercial no espaço-tempo; sua massa, a partir de sua quantidade de movimento; sua carga, relativo a efeitos eletromagnéticos, entre outras. Faz parte da área de estudo da física descrever as propriedades físicas das partículas.
A posição de uma partícula é descrita usualmente através da cinemática e do movimento relativo, para descrição de movimento de uma partícula na cinemática usamos as derivações obtidas pelo Cálculo de Newton, derivando a posição da partícula em função do tempo ($\frac{\text{d}x}{\text{d}t}$), onde a partir da segunda derivada de x, obteremos a famosa equação de $S = So + Vo + \frac{a t^2}{2}$, para o Movimento Retilíneo Uniformemente Variável, a qual descreve o movimento de um corpo que esteja sobre efeito de uma aceleração constante, mas não se limitando apenas a esse caso, pois ainda é possível utilizar o cálculo diferencial para outros tipos de movimento, desde que se tenham os valores que são constante e o comportamento da curva.
Para descrevermos a dinâmica de uma ou mais partículas além das propriedades internas, que podemos dizer são a posição e a massa da partícula, precisamos determinar os fatores externos a cada partícula observado, na mecânica clássica, a Segunda Lei de Newton pode ser usada para determinar a intensidade das interações que atuam sobre uma partícula, tendo como base a massa e aceleração da partícula no instante da medição. Ou seja, a partir da aceleração e massa de uma partícula é possível determinar a magnitude das interações que atuam sobre ela.
Os tipos de interações são determinados de acordo com as leis e comportamentos observados associados a ela, para uma boa visualização partiremos por exemplo da interação gravitacional, uma das interações fundamentais.
Na mecânica clássica a interação gravitacional é descrita por Newton como sendo, $F = G \frac{m_{a}m_{b}}{r^{2}}$, onde vemos que a intensidade da interação,$F$, é determinada a partir de uma constante, $G$, a massa das partículas, $m$, e a distância $r$ entre as partículas relacionando assim a intensidade da interação das partículas a partir de suas massas e posições.
No eletromagnetismo clássico a Lei de Coulomb propõe a intensidade das interações entre partículas estacionárias carregadas, onde sua magnitude é dada por $\vec{F}_{ab}=k_{e}\frac{q_{a}q_{b}}{R_{ab}^{3}}\vec{R}_{ab}\equiv q_{a}\vec{E}_{b}$, a equação é muito parecida com a interação gravitacional proposta por Newton, só que com uma constante diferente, associada a carga elétrica, e ao invés de massas das partículas nossos temos agora sua cargas, $q$, deste modo a intensidade da interação entre as partículas é dado a partir de sua posição e carga estacionária.
A magnitude da interação eletrodinamica de Weber para unificar a eletroestatica com a eletrodinamica e magnetismo é dada por, ${\vec{F} ={\frac {q_{1}q_{2}\mathbf {\hat {r}} }{4\pi \epsilon _{0}r^{2}}}\left(1-{\frac {{\dot {r}}^{2}}{2c^{2}}}+{\frac {r{\ddot {r}}}{c^{2}}}\right)}$, onde a intensidade da interação, $F$ em sentido ${\hat {r}}$ , é dada pelas cargas $q$ dos pares de particula onde $r$ é a distancia entre as particulas e ${\dot {r}}$ é a velocidade radial, ${\dot {r}} = \frac{\mathrm{d} r}{\mathrm{d} t}$, e ${\ddot {r}}$ a aceleração radial, ${\ddot {r}} = \frac{\mathrm{d} {\dot {r}}}{\mathrm{d} t} = \frac{\mathrm{d^2} r}{\mathrm{d} t^2}$, e $c$ a constante equivalente a velocidade da luz no vacuo.
#### Formulação de Energias (Analítica)
Na Formulação usando energias (Analítica), as equações dinâmicas dos sistemas são obtidas de Funções das Energias, tais como a função Lagrangeana ($L\equiv E_{c}- E_{p}=\frac{m\vec{\dot{r}}^{2}}{2}-E_{p}$) ou o Hamiltoniano ($H\equiv E_{c}+ E_{p}=\frac{\vec{p}^{2}}{2m}+E_{p}$). Onde $E_{c}$ e $E_{p}$ são, respectivamente, as energias cinética e potencial do sistema, e $p$ o momentum do sistema, que pode ser expresso através de $p = mv$.
Dentro da mecânica Lagrangeana o movimento é descrito através de variáveis independentes de posição, velocidade e tempo, tal que $L(r,\dot{r}, t)$, enquanto que na mecânica Hamiltoniana é uma reformulação da mecânica Lagrangeana onde o movimento é descrito de modo que ao invés da velocidade é usado o *momenta*, tal que $H(r, p, t)$, onde ${\displaystyle \textstyle p_{i}({\boldsymbol {q}},{\boldsymbol {\dot {q}}},t)\,{\stackrel {\text{def}}{=}}\,\frac{\partial {\cal {L}}}{\partial {\dot {q}}^{i}}}$.
As equações do movimento na formulação Lagrangeana são expressas pela equações de Euler-Lagrange, dadas por
$$\frac{\partial L}{\partial r_{j}}-\frac{d}{dt}\left[\frac{\partial L}{\partial \dot{r}_{j}}\right]=0$$
que correspondem às mesmas equações que são obtidas usando a segunda lei de Newton ($\sum_{k=1}^{N}\vec{F}{kn}=\dot{\vec{p}}{n}$).
As equações do movimento na formulação Hamiltoniana são expressas pelas equações de Hamilton, dadas por
$$\frac{\partial H}{\partial r_{j}}= -\dot{p}{j}$$
$$\frac{\partial H}{\partial p{j}}= +\dot{r}_{j}$$
que correspondem às mesmas equações que são obtidas usando à segunda lei de Newton ($\sum_{k=1}^{N}\vec{F}{kn}=\dot{\vec{p}}{n}$) no primeiro grupo de equações.
Neste sentido, adotando a expressão para a energia potencial elétrica comum, dada por $E_{p}=-\frac{kqQ}{r}$, temos que $L=\frac{m\dot{\vec{r}}^{2}}{2}-\frac{kqQ}{r}$ e $H=\frac{\vec{p}^{2}}{2m}+\frac{kqQ}{r}$, e as equações de Euler-Lagrange ficam
$$\begin{align*}
\frac{\partial L}{\partial r_{j}}&=\frac{\partial\left[=\frac{m\dot{\vec{r}}^{2}}{2}+\frac{kqQ}{\sqrt{x^{2}+y^{2}+z^{2}}}\right]}{\partial r_{j}}=-\left(-\frac{1}{2}\right)\frac{kqQ}{\left(x^{2}+y^{2}+z^{2}\right)^{\frac{3}{2}}}2r_{j}\\
\frac{\partial L}{\partial \dot{x}{j}}&= m\dot{r}{j} \\\frac{d}{dt}\left[\frac{\partial L}{\partial \dot{q}{j}}\right]&=m\ddot{r}{j}\\
\frac{d}{dt}\left[\frac{\partial L}{\partial \dot{q}{j}}\right]&=\frac{\partial L}{\partial q{j}} \Rightarrow m\ddot{r}{j}= \frac{kqQr{j}}{\left(x^{2}+y^{2}+z^{2}\right)^{\frac{3}{2}}}\Rightarrow m\ddot{\vec{r}}=\frac{kqQ\vec{r}}{r^{3}}\\
\end{align*}$$
#### Formulação de Campos
Na formulação de campos a interação entre partículas se dá através da interação entre campos, onde o campo é representado por valor atribuído para cada ponto do espaço-tempo.
##### Campo Gravitacional
Na mecânica clássica o campo gravitacional é definido como sendo o campo ao redor de um corpo massivo provocado pela sua massa, que exerce uma força atrativa sobre os corpos ao seu redor. A equação do campo gravitacional, $\mathbf {g}$, é:
$${\mathbf {g} ={\frac {\mathbf {F} }{m}}={\frac {\mathrm {d} ^{2}\mathbf {R} }{\mathrm {d} t^{2}}}=-GM{\frac {\mathbf {\hat {R}} }{\left|\mathbf {R} \right|^{2}}}=-\nabla \Phi}$$
Onde $\mathbf {F}$ é a força gravitacional entre os dois corpos, $m$ é a massa do corpo de teste, e $\mathbf {R}$ a posição da partícula de teste em relação ao centro de massa do corpo gerador do campo, $G$ é a constante Gravitacional de Newton, $M$ a massa do corpo gerador do campo, e $\Phi$ a energia potencial por unidade de massa.
No relatividade geral o campo gravitacional é definido por, ${\mathbf {G} =\kappa \mathbf {T} ,}$ onde $\mathbf G$ é o tensor de Einstein, $\mathbf T$ é o tensor de energia-momento e $k$ a constante gravitacional de Einstein definida por $k = \frac{8\pi G}{c^4}$
#### Campo Elétrico
O campo Elétrico é o campo físico que pode ser gerado tanto por uma partícula carregada eletricamente que exerce uma força sobre outras partículas carregadas, quanto por um campo magnético variando no tempo.
Para o caso de cargas e correntes estacionárias a intensidade do campo é determinado com base na lei de Coulomb, onde temos a força de Coulomb dividida pela carga inicial, o que nos permite calcular a intensidade do campo exercido por essa carga a outra carga $\mathbf {E} (\mathbf {x} _{0})={\mathbf {F} \over q_{0}}={1 \over 4\pi \varepsilon _{0}}{q_{1} \over (\mathbf {x} _{1}-\mathbf {x}_{0})^{2}}{\hat {\mathbf {r} }}_{1,0}$.
#### Campo Magnetico
O campo magnético é o campo que descreve a influência exercida sobre materiais magnéticos, correntes elétricas e cargas elétricas em movimento. No eletromagnetismo o termo campo magnético é usado por dois campos vetoriais distintos e relatados, denotados por força de campo magnético, $\mathbf {B}$, e densidade de fluxo magnético, $\mathbf {H}$, expressos respectivamente por ampere por metro ($\frac{A}{m}$) e newton por metro por ampere(${\dfrac {\text{kg}}{{\text{A}}{\cdot }{\text{s}}^{2}}}$) ou tesla($T$), os dois campos estão relacionados entre si através da permeabilidade de vacuo, ${\frac{ \mathbf {B}}{ \mu _{0}}=\mathbf {H} }$
#### Campo Eletromagnético
O campo eletromagnético é o campo gerado através da aceleração de cargas elétricas, também compreendido como sendo a combinação dos campos Elétrico e Magnético, formulado através da lei de forças de Lorentz, $\mathbf {F} =q\,\mathbf {E} +q\,\mathbf {v} \times \mathbf {B}$. Onde os componentes $\mathbf {E}$ e $\mathbf {B}$ são governados pelas equações de Maxwell:
$$ \nabla \cdot \mathbf{E} = \frac{\rho}{\varepsilon_0} $$
$$ \nabla \cdot \mathbf {B} =0 $$
$$ \nabla \times \mathbf{E} = -\frac {\partial \mathbf{B}}{\partial t} $$
$$ \nabla \times \mathbf {B} =\mu_{0}\mathbf {J} +\mu_{0}\varepsilon_{0}{\frac {\partial \mathbf {E} }{\partial t}} $$
Onde $\rho$ é a densidade de carga, $\varepsilon_0$ a permissividade do espaço livre, $\mu_0$ a permeabilidade do espaço livre e $\mathbf{J}$ o vetor densidade da corrente.
### CAPÍTULO 2: Estrutura computacional
Um modelo de computação descreve como as unidades computacionais, estados, memórias e comunicação são organizados, permitindo estudar a performance de um algoritmo de maneira independente das variações específicas de sua implementação.
A Máquina de Turing é um modelo matemático de computação que define uma máquina abstrata capaz de manipular símbolos em uma fita de estados. A máquina de turing é composta por dois principais elementos, um cabeçalho e uma fita infinita de estados discretos, onde o cabeçalho pode se mover através dos estados da fita, ler ou escrever o que está no estado estacionado. A máquina de Turing deve ser capaz de construir qualquer que seja o algoritmo computacional.
* A fita de estados é infinita e dividida em células, uma seguida da outra, onde cada célula contém um símbolo de um alfabeto finito, que ontem o símbolo vazio e mais outros símbolos. Onde as células onde não tem nada escrito é suposto haver o símbolo vazio.
* O cabeçalho é capaz de se mover para esquerda ou direita, ler e/ou escrever os símbolos em cada célula.
* Uma tabela finita de instruções, as instruções definem que dado cada estado da máquina, qual será o comportamento do cabeçalho, sendo ele de caráter mover entre os estados, ler e/ou escrever. Ou ainda em caso de uma máquina com estado de parada, finalizar as operações da máquina.
Uma Máquina de Turing universal é considerada capaz de dentro de si ser utilizada para implementar lógicas as quais dentro dessas lógicas existem outras máquinas de turing inseridas, ou suas equivalentes, e até mesmo outros modelos computacionais.
* Havendo qualquer similaridade entre fenômenos físicos e a máquina de turing é possível através dela realizar uma representação/simulação da mesma.
O Automato Celular é um modelo matemático que possui equivalencia com a Maquina de Turing, que consiste numa grade de celulas onde cada celula possui um numero finito de estados, onde para cada celula é definida uma vizinhança, e o proximo estado da celula é definido a partir dos estados atuais da vizinhança. Sendo comparavel essa vizinhança ao campo para efeitos de simulação.
Dentre os aspectos práticos realizados ao implementar os algoritmo utilizando computadores e tecnologias atuais, as principais restrição para os modelos são relacionados a limitações de memoria das maquinas, e velocidade de processamento de dados, sendo praticamente impossivel implementar uma fita de estados que seja infinita, ou construir uma grade infinita. Para isso será necessario para efeitos de simulação adaptar os modelos de modo que os "infinitos" sejam truncados e limitados de acordo com a eficiencia da maquina usada para estudo, ou para precisão e nivel de complexidade do que se pretende simular.
Uma simulação, assim como um modelo, tem como intuito estabelecer uma estrutura logica e simbolos, que compartilham semelhanças com o fenomeno a ser simulado. Assim os eventos observados na simulação devem possuir portanto uma semelhança de como os eventos ocorrem na realidade. Assim ao construirmos um algoritmo computacional utilizando umm metodo numerico, em conjunto com metodo analiticos, não é diferente em significado de realizar as contas e analises analiticas de um fenomeno fisico, pois a certo modo o que fisica vem fazendo ao longo dos anos é criar representações e modelos de simulação da realidade.
Para modelo de simulação podemos estimar um modelo composto por uma quantidade finita de objetos, em que cada objeto possui uma quantidade finita de estados possiveis, e o estado futuro de cada objetos é definido a partir do estado atual de todos os objetos. Com esse modelo conseguimos sintetizar os modelos anteriores e ter uma possivel equivalencia, e como ele também setamos que a dificuldades praticas irão ser definidas e crescer de acordo com a quantidade de objetos e estados possiveis.
<!-- https://mathworld.wolfram.com/ElementaryCellularAutomaton.html
https://en.wikipedia.org/wiki/Cellular_automaton
Então discutir os aspectos práticos, como dificuldades computacionais, e aspectos teóricos como a natureza de uma realidade física: uma simulação é uma realidade física? Uma realidade física é tal como uma simulação?-->
### CAPÍTULO 3: Construção do Algoritmo
Como escopo do trabalho iremos usar a linguagem de programação C++ para construir simulações que exemplifiquem as equações abordadas no capítulo 1.
A inicio iremos declarar a classe que representará um corpo definindo suas propriedades.
```C++
class Corpo
{
int posicao;
int massa;
int carga;
int velocidade;
int aceleracao;
};
```
Foi construído a classe corpo que possui como parâmetros internos sua posição, massa e carga em relação a referenciais inerciais.
<!-- #### Capítulo 3.1
Ao atribuir uma classe para a estrutura de certas partículas, podemos definir seus atributos usando variáveis de classe, e seus comportamentos através de métodos para determinar como e quando os atributos de cada particular irá variar.
Para começarmos iremos construir a classe partícula com dois atributos, um para espaço e outro para o tempo.
```C++
Classe Particula(espaço, tempo) {
Atributo espaço;
Atributo tempo;
}
```
No caso do exemplo o método de construção será feito ao chamar a partícula e informar os atributos na ordem explicada.
```C++
Particula particulaPrimordial(0, 0);
```
No exemplo assim nós criamos uma partícula com nome particulaPrimordial no tempo 0 e espaço 0.
A partir de que já sabemos como estarão organizados os atributos da partícula e quais serão, é importante começarmos a atribuir os comportamentos da partícula, ou seja, descrevermos dentro do nosso algoritmo como cada atributo irá mudar. Para isso iremos atualizar a classe Partícula para conter os comportamentos e métodos de mudança dos atributos.
```C++
Classe Particula(espaço, tempo) {
Atributo espaço;
Atributo tempo;
Método mudarEspaço(alteraçãoNoEspaço){
espaço = espaço + alteraçãoNoEspaço;
}
}
```
Acima acrescentamos a classe um método que quando chamado irá acrescentar ao valor atual do atributo espaço um novo valor. É importante ressaltar que aqui já vemos um pouco como as operações matemáticas são um pouco diferente da matemática clássica, aqui o sinal de igualdade não é usado para indicar que ambos os lados são iguais, mas sim para atribuir valores, nesse caso do exemplo, ele diz que o no valor do atributo espaço será o valor que já tem somado ao valor da alteração no espaço fornecido dentro do método. Como no exemplo a seguir, veremos o que ocorre.
```C++
Particula particulaPrimordial(0, 0);
particulaPrimordial.mudarEspaço(1); // particulaPrimordial passará a ser (1, 0)
particulaPrimordial.mudarEspaço(1); // particulaPrimordial passará a ser (2, 0)
```
No exemplo assim vemos como cada vez que ocorre a mudança de espaço de valor 1 na partícula primordial ela vai pegar o valor que tinha antes e somar com o valor dado na mudança.
#### Capítulo 3.2
Para começarmos a descrever e construir os movimentos das partículas, iremos assumir como referencial um ente abstrato em na posição 0 e com o tempo alterando uniformemente. Para isso usaremos a ideia de laços de repetição para representar cada ciclo da simulação. Como primeiro exemplo, usaremos a partícula anterior para construir o movimento retilíneo e uniforme.
```C++
Classe Particula(espaço, tempo) {
Atributo espaço;
Atributo tempo;
Método mudarEspaço(alteraçãoNoEspaço){
espaço = espaço + alteraçãoNoEspaço;
}
}
Particula particulaPrimordial(0,0);
Ciclo (Repetir 5 vezes) {
particulaPrimordial.mudarEspaço(1);
}
```
No exemplo acima notamos que se adotarmos cada ciclo como sendo 1 segundo, a partícula está se movendo uma unidade de espaço a cada segundo, e se adotarmos essa unidade de espaço como sendo o metro notamos que a partícula está se movendo a uma taxa de 1 m/s, sendo essa taxa a velocidade da partícula, sendo portanto a velocidade, o valor que vai dentro do mudarEspaço pelo ciclo. Sendo assim, para melhor compreensão iremos substituir o alteraçãoNoEspaço por velocidade. E da mesma maneira iremos agora determinar a mudança da velocidade.
```C++
Classe Particula(espaço, tempo) {
Atributo espaço;
Atributo tempo;
Atributo velocidade;
Atributo alteraçãoNaVelocidade;
Método mudarEspaço(velocidade){
espaço = espaço + velocidade;
}
Método mudarVelocidade(alteraçãoNaVelocidade){
velocidade = velocidade + alteraçãoNaVelocidade;
}
}
Particula particulaPrimordial(0,0);
Ciclo (Repetir 5 vezes) {
particulaPrimordial.mudarVelocidade(10);
}
```
Ao convertermos o algoritmo acima para C++ (abaixo), e testarmos os valores nos deparamos com uma inconsistência em relação ao Cálculo..
```C++
#include <iostream>
int main(){
class Particula {
public:
int espaco = 0;
Particula(int x){
espaco = x;
}
int velocidade = 0;
int aceleracao = 0;
void mudarEspaco(int vel) {
espaco = espaco + vel;
velocidade = vel;
}
void mudarVelocidade(int acel) {
velocidade = velocidade + acel;
aceleracao = acel;
mudarEspaco(velocidade);
}
};
Particula particula(0);
particula.velocidade = 0;
particula.aceleracao = 10;
for (int i; i < 50; i++){
std::cout << "Tempo: " << i << " Velocidade: " << particula.velocidade << " Espaço: " << particula.espaco << std::endl;
particula.mudarVelocidade(10);
}
}
```
O código acima como verificamos não retornará os valores esperados pela equação , mas sim o equivalente a . Onde esse “+ 1” pode ser interpretado por “+ p” onde p é cada ciclo. O que pode ser corrigido de formas simples, ao usarmos valores de t que sejam muito maiores do que o tamanho do ciclo, onde o ciclo possa ser considerado um infinitésimo, ou também através da média entre S(t-1) e S(t). Esses resultados podem ser associado a forma como a matemática é construída no algoritmo ou também interpretado que os valores obtidos são valores de “transição” e não valores “instantâneos” onde o nosso p e ciclo, são as unidades mínimas de mudança de tempo, por tanto não existindo em termos observacionais uma mudança instantânea propriamente dita.
Neste ponto, o nosso algoritmo da conta de forma satisfatória da descrição de movimentos, tendo isso em consideração iremos terminar a construção da nossa classe partícula ao determinarmos todos os componentes internos da partícula, e no caso da mecânica outro componente importante na concepção de um objeto é sua massa e a primeiro momento iremos descrever no nosso algoritmo uma massa constante independente do tempo e velocidade da partícula, o que não é 100% correto mas é uma aproximação válida e muito usado na mecânica clássica.
```C+++
Classe Particula(espaço, massa) {
Atributo espaço;
Atributo tempo;
Atributo massa;
Atributo velocidade;
Atributo aceleração;
Método mudarEspaço(velocidade){
espaço = espaço + velocidade;
}
Método mudarVelocidade(aceleração){
velocidade = velocidade + alteraçãoNaVelocidade;
mudarEspaço(velocidade);
}
}
Particula particulaPrimordial(0,1);
Ciclo (Repetir 5 vezes) {
particulaPrimordial.mudarVelocidade(10);
}
```
### CAPÍTULO 4: Interações entre Partículas e ações externas
Tendo em vista as propriedades internas das partículas e seu comportamento, é necessário agora construirmos como essa partícula se comporta ao interagir com outras partículas, e como essa interação se dá, é importante definir a interação como a mudança de atributos e comportamentos provocado por meio da relação entre duas ou mais partículas. O primeiro passo é construirmos a função que descreve uma interação, partiremos inicialmente do algoritmo para descrever a interação gravitacional de Newton.
```C++
função interaçãoGravitacional(particula1, particula2){
distância = particula1.espaço - particula2.espaço;
G = constanteGravitacional;
F = G * (particula1.massa * particula2.massa) / (distância ^ 2);
aceleração1 = F / particula1.massa;
aceleração2 = F / particula2.massa;
particula1.mudarVelocidade(aceleração1);
particula2.mudarVelocidade(-aceleração2);
retorna F;
}
```
No algoritmo acima construímos a interação gravitacional, de modo que ela descreve a mudança de velocidade de duas partículas a partir da distância entre elas.
### Capítulo 5
Construir modelos de 2 ou mais partículas e suas interações através de pseudocódigo e código em C/C++ -->