Giter Site home page Giter Site logo

davidolima / visualizador-de-funcoes-implicitas Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 45 KB

Visualizador de funções implicitas utilizando árvores quaternárias.

License: GNU General Public License v3.0

Python 100.00%
implicit-functions quadtree visualization

visualizador-de-funcoes-implicitas's Introduction

Visualizador de Funções Implícitas

Introdução

Este visualizador foi desenvolvido por David de Oliveira Lima para o curso de Estrutura de Dados e Algoritmos da UFBA ministrado pelo professor Antonio L. Apolinário Jr. Este projeto foi desenvolvido para que se assemelhasse com o exemplo apresentado nas instruções do trabalho, porém com algumas mudanças próprias, como a interação com o visualizador em runtime, o acréscimo de exemplos, entre outros.

A Estrutura

A estrutura de dados escolhida para o desenvolvimento da solução deste trabalho foi a Árvore Quaternária. A escolha se deve graças a possibilidade da representação do espaço de forma particionada a modo que possamos visualizar a função implícita em qualquer resolução de forma efetiva.

Como a função é desenhada

Avaliação de pertencimento à curva

Seja f a função que queremos visualizar e (x,y) as coodernadas do vértice v. Para cada vértice v no quadrado que representa o domínio da folha atual, calculamos f(x,y) e avaliamos a magnitude do resultado do cálculo. Se pelo menos um vértice possui magnitude diferente dos outros, subdividimos aquela folha e realizamos este mesmo processo recursivamente para cada filho, até chegarmos ao limite da resolução ou encontrarmos uma folha em que todos os vértices possuam o mesmo sinal.

Modo de visualização 1

  • Se a folha possui todos os vértices maiores ou menores que 0 em relação a f(x,y), pintamos de branco.
  • Se a folha for frontal (pertence a função), a pintamos de preto.
  • Em todos os casos renderizamos a borda de cor relacionada ao nível daquela folha na árvore.

Modo de visualização 2

  • Se a folha for frontal, a pintamos de branco. Se não, a pintamos de preto.

Modo de visualização 3

  • Se a folha possui todos os vértices positivos, a pintamos de azul.
  • Se a folha possui todos os vértices negativos ou for frontal, a pintamos de vermelho.

Complexidade

Construção

A construção da árvore quaternária apresenta complexidade média de O(nlog(n)), O(n²) no pior caso e O(1) no melhor caso. Isso se deve pois é preciso chegar na folha correta para realizar a subdivisão apropriada.

Visualização

Todas as visualizações apresentam complexidade de O(n²) pois precisamos acessar todas as folhas de todas as sub-árvores.

Exemplos

O visualizador consta com 8 exemplos:

0 1 2 3 4 5 6 7
(x² + y² - 4)³ - x² * y³ x² + y² - 49 x⁷ - y⁵ + x² * y³ - (xy)² y²- x² - 16 x⁴(1-x)⁵ + x + (y²)(1-y) + 0.1 x(1-x)(1+x) + y(1-y)(1+y) + 0.1 x² + y² + xy - (xy)² * 0.5 - 0.25 x³ + y² - 6xy

Como utilizar o visualizador

Inicie o visualizador executando com o comando python3 main.py no terminal. Todas as funcionalidades de visualização da aplicação podem ser utilizadas diretamente dentro da aplicação, sem necessidade de executá-la novamente. Uma tabela com todos os controles que podem ser utilizados na aplicação pode ser vista abaixo. Todas as configurações atuais são preservadas quando se troca de função, ou seja, a resolução e o modo de visualização se mantêm quando troca-se de função.

Tabela de controles

Tecla Descrição
Seta para cima Aumentar refinamento
Seta para baixo Diminuir refinamento
Seta para direita Próxima função
Seta para esquerda Função anterior
1 Modo de visualização 1
2 Modo de visualização 2
3 Modo de visualização 3

Fontes

visualizador-de-funcoes-implicitas's People

Contributors

davidolima avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.