Vídeo do projeto: https://youtu.be/IUDgSsGRKuA
Obtenção de um conjunto abitrário de coordenadas dentro do menor caminho entre dois pontos em uma superfície no
O cálculo analítico das geodésicas é normalmente obtido por cálculo variacional, pela minimização do funcional
que representa o comprimento do caminho entre os pontos
De modo mais geral, podemos escrever para um caminho parametrizado:
o que pode ser minimizado pela equação de Euler-Lagrange:
Desta forma, de modo geral, mesmo para a obtenção de uma estimativa do melhor caminho em uma superfície arbitrária métodos numéricos para equações diferenciais se fazem necessários.
Buscaremos evitar fazer isso, bem como outros métodos de geometria diferencial, modelando nosso problema como a otimização de uma função de perda escolhida estratégicamente.
Os pontos são obtidos da seguinte forma:
-
Um conjunto de
$n$ pontos igualmente espaçados é gerado entre dois pontos$A$ e$B$ selecionados na superfície desejada. -
São gerados
$m$ elementos ("partículas") somando um ruído aleatório com distribuissão normal$N(\mu=0, \sigma=0.1)$ aos pontos, afim de gerar uma pequena variabilidade inicial. -
Buscamos minimizar a função de perda
$\Gamma$ (ou maximizar o fitness$\frac{1}{\Gamma}$ ) definida por:
$$ \Gamma = \mu_1 l + \mu_2 \sum^{n+1}{i=1} |(l_i - \overline{l})| + \mu_3 \sum^{n}{i=1} |f(x_i, y_i, z_i)| $$
em o primeiro termo está relacionado com o comprimento total entre os pontos, o segundo com a distância dos pontos entre si, e o último com a distância dos pontos à superfície.
Os parâmetros
- Afim de maximizar o fitness, em cada geração ordenaremos as partículas e separaremos as
$k$ melhores (escolhido pelo usuário) para gerarem as demais pela mistura dos seus pontos interiores entre si (crossover) e adição de ruído gaussiano (mutação).
Para instalar requisitos:
$ pip3 install -r requirements.txt
Para testar com o arquivo de exemplo:
$ python3 lazypeon.py
Para abrir página interativa:
$ python3 interactive.py
e acessar http://127.0.0.1:8050/
no navegador.