Polígonos em Código
Sobre a Matemática
Polígono é a região do plano limitado por um poligonal fechada, ou ainda, a figura formada pela união dos n segmentos consecutivos.
Um polígono tem vértices, ângulos, lados, diagonais e ângulos externos.
Existem dois tipos de polígonos, os côncavos e os convexos, mas para classificação e estudo, serão demonstrados aqui os polígonos convexos.
Um polígono é convexo quando estiver todo contido num mesmo semiplano, determinado pela reta suporte de qualquer um dos seus lados.
Região poligonal é a união do polígono com o seu interior.
Ângulo externo de um polígono é aquele formado por um dos lados e o prolongamento de um dos lados adjacentes.
Quando à nomenclatura, os polígonos se classificam: pelo número de ângulos e de lados.
| triângulo | 3 lados | trilátero |
| quadrângulo | 4 lados | quadrilátero |
| pentágono | 5 lados | pentalátero |
| hexágono | 6 lados | hexalátero |
| heptágono | 7 lados | heptalátero |
| octógono | 8 lados | octalátero |
| eneágono | 9 lados | enelátero |
| decágono | 10 lados | decalátero |
| undecágono | 11 lados | undecalátero |
| dodecágono | 12 lados | dodecalátero |
| pentadecágono | 15 lados | pentadecalátero |
| icoságono | 20 lados | icosalátero |
Para os demais, dizemos polígonos de n lados.
Quanto à classificação dizemos que um polígono é:
a) equilátero: aquele que tem lados congruentes (losango, quadrado, etc.);
b) equiângulo: aquele que tem ângulos congruentes (retângulo, quadrado, etc.);
c) regular: aquele que é ao mesmo tempo equilátero e equiângulo (quadrado).
Sobre o Código
Na linguagem de programação Python,
import – é o comando usado para trazer bibliotecas externas para o código.
numpy – é a biblioteca numérica usada para cálculos matemáticos e vetoriais.
as np – cria um apelido para a biblioteca (np), facilitando o uso.
matplotlib – é a biblioteca para criação de gráficos.
.pyplot – é o módulo do matplotlib que contém funções de plotagem.
as plt – é o apelido para pyplot, usado para simplificar comandos.
{} – define um dicionário (estrutura de pares chave:valor).
class – é a palavra-chave para criar uma classe (modelo de objeto).
def – define uma função ou método dentro da classe.
__init__ – é o método construtor: executa automaticamente ao criar um objeto.
self – é a referência ao próprio objeto dentro da classe.
np.linspace() – gera valores igualmente espaçados entre dois limites.
np.pi – é a constante π (3.14159…).
endpoint= – é o parâmetro que define se o último valor deve ser incluído.
np.cos() – calcula o cosseno de um ângulo.
.sin() – calcula o seno de um ângulo.
for – inicia um laço de repetição.
in – indica o conjunto a ser percorrido no loop.
return – envia um valor de volta para quem chamou a função.
range() – gera uma sequência de números inteiros.
len() – retorna o tamanho de uma lista ou sequência.
np.array() – converte listas em arrays NumPy (mais rápidos e matemáticos).
.append() – adiciona um elemento ao final de uma lista.
np.sign – retorna o sinal de um número: -1, 0 ou +1.
!= – é o operador “diferente de”.
all() – retorna True se todos os elementos de um iterável forem True.
zip() – junta listas em pares (ou tuplas) correspondentes.
plt.figure() – cria uma nova figura para o gráfico.
figsize= – define o tamanho da figura (largura, altura).
plt.plot() – desenha linhas e pontos no gráfico.
plt.title() – define o título do gráfico.
f-string – é a forma moderna de formatar strings usando f”texto {variável}”.
plt.axis() – controla os eixos do gráfico (ex.: “equal”).
plt.grid() – ativa a grade no gráfico.
plt.show() – exibe o gráfico na tela.
__name__ – é a variável interna que indica como o arquivo está sendo executado.
__main__ – é o valor de __name__ quando o arquivo é executado diretamente.
if – é a estrutura condicional (“se”).
else – é a parte alternativa da condição (“senão”).
.plotar() – é a chamada do método plotar() do objeto criado.
# – é usado para criar comentários ao código, que são notas para se entender melhor o que o código faz.
Vamos ao código…
import numpy as np
import matplotlib.pyplot as plt
# ---------------------------------------------------------
# Dicionário de nomes dos polígonos
# ---------------------------------------------------------
nomes_poligonos = {
3: ("triângulo", "trilátero"),
4: ("quadrângulo", "quadrilátero"),
5: ("pentágono", "pentalátero"),
6: ("hexágono", "hexalátero"),
7: ("heptágono", "heptalátero"),
8: ("octógono", "octalátero"),
9: ("eneágono", "enelátero"),
10: ("decágono", "decalátero"),
11: ("undecágono", "undecalátero"),
12: ("dodecágono", "dodecalátero"),
15: ("pentadecágono", "pentadecalátero"),
20: ("icoságono", "icosalátero")
}| Código Python (.py) | O que faz |
| import numpy as np | Importa a biblioteca NumPy e a apelida de np, usada para cálculos numéricos. |
| import matplotlib.pyplot as plt | Importa o módulo pyplot do Matplotlib como plt, usado para criar gráficos. |
| nomes_poligonos = { | Cria um dicionário chamado nomes_poligonos. |
| 3: (“triângulo”, “trilátero”), | Associa 3 lados aos nomes “triângulo” e “trilátero”. |
| 4: (“quadrângulo”, “quadrilátero”), | Associa 4 lados aos nomes “quadrângulo” e “quadrilátero”. |
| 5: (“pentágono”, “pentalátero”), | Associa 5 lados a “pentágono” e “pentalátero”. |
| 6: (“hexágono”, “hexalátero”), | Associa 6 lados a “hexágono” e “hexalátero”. |
| 7: (“heptágono”, “heptalátero”), | Associa 7 lados a “heptágono” e “heptalátero”. |
| 8: (“octógono”, “octalátero”), | Associa 8 lados a “octógono” e “octalátero”. |
| 9: (“eneágono”, “enelátero”), | Associa 9 lados a “eneágono” e “enelátero”. |
| 10: (“decágono”, “decalátero”), | Associa 10 lados a “decágono” e “decalátero”. |
| 11: (“undecágono”, “undecalátero”), | Associa 11 lados a “undecágono” e “undecalátero”. |
| 12: (“dodecágono”, “dodecalátero”), | Associa 12 lados a “dodecágono” e “dodecalátero”. |
| 15: (“pentadecágono”, “pentadecalátero”), | Associa 15 lados a “pentadecágono” e “pentadecalátero”. |
| 20: (“icoságono”, “icosalátero”) | Associa 20 lados a “icoságono” e “icosalátero”. |
| } | Fecha o dicionário nomes_poligonos. |
# ---------------------------------------------------------
# Classe Polígono
# ---------------------------------------------------------
class Poligono:
def __init__(self, n_lados, raio=1):
self.n = n_lados
self.raio = raio
self.vertices = self._gerar_vertices()
def _gerar_vertices(self):
angulos = np.linspace(0, 2*np.pi, self.n, endpoint=False)
return [(self.raio * np.cos(a), self.raio * np.sin(a)) for a in angulos]
def angulo_externo(self):
return 360 / self.n
def eh_convexo(self):
"""Verifica convexidade usando produto vetorial."""
sinais = []
v = self.vertices
for i in range(len(v)):
p1 = np.array(v[i])
p2 = np.array(v[(i + 1) % self.n])
p3 = np.array(v[(i + 2) % self.n])
a = p2 - p1
b = p3 - p2
cross = a[0] * b[1] - a[1] * b[0]
sinais.append(np.sign(cross))
sinais = [s for s in sinais if s != 0]
return all(s == sinais[0] for s in sinais)
def nome(self):
return nomes_poligonos.get(self.n, (f"{self.n}-gono", f"{self.n}-látero"))
def plotar(self):
x, y = zip(*(self.vertices + [self.vertices[0]]))
plt.figure(figsize=(6, 6))
plt.plot(x, y, marker='o')
plt.title(f"Polígono de {self.n} lados — {self.nome()[0]}")
plt.axis("equal")
plt.grid(True)
plt.show()| Código Python (.py) | O que faz |
| class Poligono: | Define a classe Poligono. |
| def __init__(self, n_lados, raio=1): | Define o construtor, recebendo número de lados e raio (padrão 1). |
| self.n = n_lados | Armazena o número de lados no atributo self.n. |
| self.raio = raio | Armazena o raio no atributo self.raio. |
| self.vertices = self._gerar_vertices() | Chama o método interno para gerar os vértices e guarda em self.vertices. |
| def _gerar_vertices(self): | Define método privado para gerar vértices do polígono regular. |
| angulos = np.linspace(0, 2*np.pi, self.n, endpoint=False) | Cria self.n ângulos igualmente espaçados entre 0 e . |
| return [(self.raio * np.cos(a), self.raio * np.sin(a)) for a in angulos] | Converte cada ângulo em coordenadas no círculo de raio raio. |
| def angulo_externo(self): | Define método para calcular o ângulo externo do polígono regular. |
| return 360 / self.n | Retorna o valor do ângulo externo em graus: . |
| def eh_convexo(self): | Define método para verificar se o polígono é convexo. |
| “””Verifica convexidade usando produto vetorial.””” | Docstring explicando a lógica usada (produto vetorial). |
| sinais = [] | Cria lista vazia para armazenar os sinais dos produtos vetoriais. |
| v = self.vertices | Atalho: v referencia a lista de vértices. |
| for i in range(len(v)): | Loop sobre cada vértice pelo índice i. |
| p1 = np.array(v[i]) | Converte o vértice atual em array NumPy. |
| p2 = np.array(v[(i + 1) % self.n]) | Próximo vértice (com volta circular usando %). |
| p3 = np.array(v[(i + 2) % self.n]) | Vértice seguinte ao próximo (também circular). |
| a = p2 – p1 | Vetor da aresta de p1 para p2. |
| b = p3 – p2 | Vetor da aresta de p2 para p3. |
| cross = a[0] * b[1] – a[1] * b[0] | Calcula o produto vetorial 2D (componente z). |
| sinais.append(np.sign(cross)) | Guarda o sinal do produto vetorial (positivo, negativo ou zero). |
| sinais = [s for s in sinais if s != 0] | Remove sinais zero (casos colineares). |
| return all(s == sinais[0] for s in sinais) | Retorna True se todos os sinais forem iguais → polígono convexo. |
| def nome(self): | Define método para obter o nome do polígono. |
| return nomes_poligonos.get(self.n, (f”{self.n}-gono”, f”{self.n}-látero”)) | Busca no dicionário; se não existir, cria nome genérico. |
| def plotar(self): | Define método para desenhar o polígono. |
| x, y = zip(*(self.vertices + [self.vertices[0]])) | Separa listas de x e y, repetindo o primeiro vértice para fechar o polígono. |
| plt.figure(figsize=(6, 6)) | Cria uma nova figura com tamanho 6×6. |
| plt.plot(x, y, marker=’o’) | Plota os pontos e liga com linhas, marcando vértices com círculos. |
| plt.title(f”Polígono de {self.n} lados — {self.nome()[0]}”) | Define o título do gráfico com número de lados e nome. |
| plt.axis(“equal”) | Ajusta os eixos para mesma escala em x e y. |
| plt.grid(True) | Ativa a grade no gráfico. |
| plt.show() | Exibe o gráfico na tela. |
# ---------------------------------------------------------
# Exemplo de uso
# ---------------------------------------------------------
if __name__ == "__main__":
n = 7 # escolha o número de lados
p = Poligono(n)
print("Nome:", p.nome()[0])
print("Nome alternativo:", p.nome()[1])
print("Ângulo externo:", p.angulo_externo(), "graus")
print("É convexo:", "Sim" if p.eh_convexo() else "Não")
p.plotar()| Código Python (.py) | O que faz |
| if __name__ == “__main__”: | Garante que o bloco abaixo só rode se o arquivo for executado diretamente. |
| n = 7 # escolha o número de lados | Define n como 7 (heptágono); comentário sugere alterar. |
| p = Poligono(n) | Cria um objeto Poligono com n lados. |
| print(“Nome:”, p.nome()[0]) | Imprime o nome principal do polígono. |
| print(“Nome alternativo:”, p.nome()[1]) | Imprime o nome alternativo (em “-látero”). |
| print(“Ângulo externo:”, p.angulo_externo(), “graus”) | Mostra o valor do ângulo externo em graus. |
| print(“É convexo:”, “Sim” if p.eh_convexo() else “Não”) | Verifica convexidade e imprime “Sim” ou “Não”. |
| p.plotar() | Chama o método para desenhar o polígono. |
Saída do código (valor de retorno)…
Nome: heptágono
Nome alternativo: heptalátero
Ângulo externo: 51.42857142857143 graus
É convexo: Sim

Fonte:
- Editora Didática Paulista. Ensino Didático 2000: Ensino Fundamental e Ensino Médio. Sorocaba: Editora Didática Paulista, [s.d.].
- Códigos e comentários gerados por Microsoft Copilot com revisão nossa.
- https://docs.python.org/pt-br/3/ [Documentação Oficial do Python]