Sobes.tech
Middle — Senior

Como determinar o eixo de simetria vertical para uma lista de pontos?

sobes.tech IA

Resposta da IA

Para determinar o eixo de simetria vertical para um conjunto de pontos num plano, pode usar a seguinte abordagem:

  1. Encontrar o valor mínimo e máximo ao longo do eixo X entre todos os pontos: minX e maxX.
  2. Supor que o eixo de simetria é uma linha vertical x = (minX + maxX) / 2.
  3. Verificar para cada ponto se existe o seu reflexo relativamente a este eixo, ou seja, um ponto com coordenadas (2 * axisX - x, y).

Se para todos os pontos for encontrado um ponto refletido correspondente, então a linha x = axisX é o eixo de simetria.

Exemplo em Python:

def tem_simetria_vertical(pontos):
    xs = [p[0] for p in pontos]
    min_x, max_x = min(xs), max(xs)
    axis_x = (min_x + max_x) / 2

    conjunto_pontos = set(pontos)
    for x, y in pontos:
        refletido = (2 * axis_x - x, y)
        if refletido not in conjunto_pontos:
            return False, None
    return True, axis_x

# Exemplo de uso:
pontos = [(1,2), (3,2), (1,4), (3,4)]
resultado, eixo = tem_simetria_vertical(pontos)
if resultado:
    print(f"Eixo de simetria: x = {eixo}")
else:
    print("Eixo de simetria não encontrado")

Este método funciona para conjuntos discretos de pontos e verifica a correspondência exata dos pontos refletidos.