abril 29, 2026

Polígonos em Código

Por admin

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ângulo3 ladostrilátero
quadrângulo4 ladosquadrilátero
pentágono5 ladospentalátero
hexágono6 ladoshexalátero
heptágono7 ladosheptalátero
octógono8 ladosoctalátero
eneágono9 ladosenelátero
decágono10 ladosdecalátero
undecágono11 ladosundecalátero
dodecágono12 ladosdodecalátero
pentadecágono15 ladospentadecalátero
icoságono20 ladosicosalá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 npImporta a biblioteca NumPy e a apelida de np, usada para cálculos numéricos.
import matplotlib.pyplot as pltImporta 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_ladosArmazena o número de lados no atributo self.n.
self.raio = raioArmazena 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 2π.
return [(self.raio * np.cos(a), self.raio * np.sin(a)) for a in angulos]Converte cada ângulo em coordenadas (x,y) 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.nRetorna o valor do ângulo externo em graus: 360/n.
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.verticesAtalho: 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 – p1Vetor da aresta de p1 para p2.
b = p3 – p2Vetor 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 ladosDefine 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]