Skip to content

O algoritmo de Fill Poly emprega uma abordagem incremental para preencher polígonos, interpolando cores entre vértices para criar um degradê harmonioso. Ele calcula as variações de cor dentro do triângulo, resultando em um preenchimento suave e gradativo

License

Notifications You must be signed in to change notification settings

gabrielmazz/fill-poly-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Algoritmo de Fill Poly

Trabalho de Computação Gráfica, faculdade de Ciência da Computação, UNIOESTE (Universidade Estadual do Oeste do Paraná)

Desenvolvido por: Gabriel Mazzuco


Indice

Descrição do Projeto

O algoritmo de Fill Poly é um algoritmo de preenchimento de polígonos, que consiste em preencher um polígono com uma cor sólida, a partir de um ponto inicial. O algoritmo é baseado no algoritmo de Scanline, que consiste em preencher uma linha horizontal, a partir de um ponto inicial, até um ponto final.

O código usa como base um poligono definido pelo usuário, esse poligono usa seus vértices para definir aonde começa e termina o preenchimento. Definido pelo usuário também as cores que serão usadas para o preenchimento, assim realizando uma interpolação, causando o efeito degradê.

Pré-requisitos

Requisitos para o projeto

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:

  • Python, versão 3.8.5 ou superior

    • sudo apt-get install python3.8
  • Tkinter, versão 8.6 ou superior

    • sudo apt-get install python3-tk
    • Usado no código para a criação da interface gráfica e todas as suas funcionalidades
  • Pillow, versão 8.0.1 ou superior

    • pip install pillow
    • Usado no código para manipulação de imagens e a possibilidade de tirar prints da tela do tkinter
  • Rich, versão 9.2.0 ou superior

    • pip install rich
    • Usado no código para criação de tabelas e logs mais organizados sobre a demonstração do log do algoritmo

Requisitos mínimos de hardware

  • Sistema operacional: Linux (Ubuntu 20.04.2 LTS)
  • Processador: dual-core 1.6GHz ou superior
  • Memória RAM: 2GB ou superior
  • Espaço em disco: 1GB ou superior

Como usar

Para usar o algoritmo, basta executar o arquivo `main.py` com o comando, dentro da pasta do projeto:

python3 main.py

Após isso, uma janela irá abrir, com a interface gráfica do algoritmo.

Para começar, basta clicar com o botão esquerdo do mouse, nos pontos que deseja criar o primeiro polígono, tendo a possibilidade de criar quantos polígonos quiser apenas clicando no menu Editar e clicando em Novo Polígono. Dentro deste menu, também é possível editar os polígonos já criados, excluindo-os ou limpar completamente a tela.

Após criar os polígono, é possivel escolher várias opções de edição para o poligo Pintar arestas, Pintar vertices, Pintar poligono, tudo isso sendo possivel apenas se escolher a cor do objeto no mesmo menu, isso irá abrir uma palheta de cores do próprio tkinter, onde é possivel escolher a cor desejada.

Para usar as opções nos poligonos, é atribuido o botão direito para realizar todas as ações esperadas.

Existe também o menu de Debug aonde é possivel ver o log do algoritmo, aonde é mostrado como está a disposição das listas que o programa utiliza na sua execução, dentre as suas informações, é possivel ver quais são os polígonos que estão sendo preenchidos, quais são as arestas que estão sendo pintadas, quais são os vértices que estão sendo pintados, quais são os polígonos que estão sendo apenas pintados, e quais são os vértices globais que estão sendo criados no formato de tabelas, usadas pela biblioteca Rich, tudo sendo mostrada no terminal.

Fill Poly

Para realizar o uso do algoritmo de Fill Poly que é o intuito do projeto, basta clicar no menu Pintar e clicar em Fill Poly também com o botão direito do mouse, depois de ter escolhido um cor para cada vértice do polígono.

É possivel ver de forma visual quais cores foram escolhidas para cada vértice pois ele estará pintado com a cor escolhida.

Caso os três vértices do polígono não tenham sido pintados, o algoritmo irá retornar uma mensagem de erro, informando que não é possivel realizar o preenchimento do polígono. Portanto, é necessário pintar os três vértices do polígono para que o algoritmo funcione corretamente.

Interessante ressaltar que o algoritmo é bem lerdo e não é possivel atualizar a tela a todo momento, por exemplo quando editamos os vértices de um polígono, ele não atualiza o fill poly iterativamente, portanto devemos clicar no menu Refresh e clicar em Refresh Fill Poly para atualizar os poligonos que estão preenchidos mas agora nas suas novas posições.

Carregando dados de um arquivo

Para carregar os dados de um arquivo, basta clicar no menu Arquivo e clicar em Carregar dados, isso irá abrir uma janela para escolher o arquivo que deseja carregar.

Primeiramente deve ter sido salvo previamente um arquivo com os dados de um polígono, para isso basta clicar no menu Arquivo e clicar em Salvar dados, isso irá abrir uma janela para escolher o local e o nome do arquivo que deseja salvar, tudo que está na tela será salvo no arquivo.

Formato do arquivo

O arquivo é salvo no formato .tk com o nome indicado pelo próprio usuário, sendo com o seguinte formato:

vertices_globais = [(x1, y1), (x2, y2), (x3, y3)]
lista_poligonos_preenchidos = [Px, [[(V1, V2), (R, G, B)], [(V2, V3), (R, G, B)], [(V3, V1), (R, G, B)]]]
lista_arestas_pintadas = [[(x1, y1), (x2, y2)], (R, G, B), (a1, a2), Px]
lista_vertices_pintados = [(x1, y1), (R, G, B), Px, Vx]
lista_poligonos_apenas_pintados = [Px, (R, G, B)]

Onde:

  • vertices_globais: é uma lista com todos os vértices que foram criados na tela, sendo que cada vértice é uma tupla com as coordenadas x e y do vértice
  • lista_poligonos_preenchidos: é uma lista com todos os polígonos que foram preenchidos com o algoritmo de fill poly, sendo que cada polígono dentro da lista é dado pelo seu número Px, coordenadas do vértice V1, V2 e V3 que formam o polígono, e a cor R, G e B que foi escolhida para o polígono
  • lista_arestas_pintadas: é uma lista com todas as arestas que foram pintadas, sendo que cada aresta dentro da lista é dada pelas coordenadas x1, y1, x2 e y2 que formam a aresta, e a cor R, G e B que foi escolhida para a aresta
  • lista_vertices_pintados: é uma lista com todos os vértices que foram pintados, sendo que cada vértice dentro da lista é dado pelas coordenadas x e y do vértice, e a cor R, G e B que foi escolhida para o vértice, além do número Px que indica qual polígono o vértice pertence e o número Vx que indica qual vértice do polígono o vértice é
  • lista_poligonos_apenas_pintados: é uma lista com todos os polígonos que foram apenas pintados com cores simples, sem usar o algoritmo de fill poly, sendo que cada polígono dentro da lista é dado pelo seu número Px, e a cor R, G e B que foi escolhida para o polígono

Referências

About

O algoritmo de Fill Poly emprega uma abordagem incremental para preencher polígonos, interpolando cores entre vértices para criar um degradê harmonioso. Ele calcula as variações de cor dentro do triângulo, resultando em um preenchimento suave e gradativo

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages