Solicitação de algoritmo 12 – ponto no retângulo

A solicitação desse algoritmo foi feita pela Melyssa e é uma solicitação em linguagem de programação Python.

Segue o enunciado: elaborar um programa que recebe como informação quatro pontos que representam as coordenadas que formam um retângulo, e um outro ponto. O Programa deve imprimir se o ponto está dentro do retângulo ou não.

A primeira tentativa de solução da Melyssa é mostrada abaixo. Ela tentou algo relacionado com o tamanho/área do retângulo, lendo sua altura e largura. Isso não atendia o que era solicitado no enunciado (que é claro na necessidade de informar os 4 pontos que formam o retângulo).

altura = int(input('Qual a altura do retângulo?'))
largura = int(input('Qual a largura do retângulo?'))
ponto = int(input('Qual o ponto que você deseja verificar?'))
area = largura*altura
if ponto>area:
    print ('Seu ponto não está dentro do retângulo')
else:
    print ('Seu ponto está dentro do retângulo.')

Na dúvida sobre como resolver um problema, as vezes o melhor é começar com algo relacionado para ir “destravando” alternativas de como resolver. Infelizmente a alternativa pensada estava longe do que era pedido, mas a Melyssa partiu para um nova tentativa.

A segunda tentativa de solução da Melyssa começou com o direcionamento certo (lendo os pontos), mas com uma interpretação errada de como resolver. A solução dela segue abaixo e logo em seguida explico o que está incorreto.

c1 = int(input('Qual a coordenada 1?'))
c2 = int(input('Qual a coordenada 2?'))
c3 = int(input('Qual a coordenada 3?'))
c4 = int(input('Qual a coordenada 4?'))
ponto = int(input('Qual o ponto principal?'))

if ponto > c1
    print('fora')
if ponto > c2
    print('fora')
if ponto > c3
    print('fora')
if ponto > c4
    print('fora')
print('dentro')

Logo na primeira linha é buscado ler a coordenada do primeiro ponto, mas isso não está correto. Recorro à imagem abaixo para explicar melhor. Na figura é desenhado um retângulo no plano cartesiano. O ponto A está na coordenada (2,2), o ponto B está na coordenada (5,2), o ponto C na coordenada (5,4) e o ponto D está na coordenada (2,4). Ou seja, uma coordenada é um par de valores que designam os valores de x e y no plano cartesiano.

Fonte da imagem: https://ligamundo.plurall.net/wp-content/uploads/2018/11/28_LM_MAT_5ANO_4BIM_Sequencia_didatica_1_TRTA_ok.pdf

Sendo assim, para ler as coordenada de um ponto é preciso ler dois valores. Isso faz o código ficar repetitivo, mas é preciso ler os 4 pontos do retângulo e também o ponto que se quer determinar se está dentro ou fora da área.

x1 = input("Informe o valor de x da primeira coordenada: ")
y1 = input("Informe o valor de y da primeira coordenada: ")
print("Primeira coordenada: {},{}".format(x1, y1))

Aqui vale indicar uma alternativa, que envolve ler os dois valores em um único input() fazendo uso da função split(). O código abaixo é similar ao imediatamente acima para realização da leitura da coordenada. Como o código é mais complexo de entender (com a atribuição para duas variáveis e uso da função split()) preferi elaborar a solução utilizando a forma mais simples e convencional.

x1, y1 = input("Informe a primeira coordenada: ").split()
print("Primeira coordenada: {},{}".format(x1, y1))

Além de ler dois valores para cada coordenada (quatro no total), o mesmo é preciso fazer para o ponto que se quer testar se está dentro ou fora do retângulo. O código final é mostrado a seguir.

x1 = input("Informe o valor de x da primeira coordenada: ")
y1 = input("Informe o valor de y da primeira coordenada: ")
#print("Primeira coordenada: {},{}".format(x1, y1))

x2 = input("Informe o valor de x da primeira coordenada: ")
y2 = input("Informe o valor de y da primeira coordenada: ")
#print("Primeira coordenada: {},{}".format(x2, y2))

x3 = input("Informe o valor de x da primeira coordenada: ")
y3 = input("Informe o valor de y da primeira coordenada: ")
#print("Primeira coordenada: {},{}".format(x3, y3))

x4 = input("Informe o valor de x da primeira coordenada: ")
y4 = input("Informe o valor de y da primeira coordenada: ")
#print("Primeira coordenada: {},{}".format(x4, y4))

xA = input("Informe o valor de x de uma coordenada: ")
yA = input("Informe o valor de y de uma coordenada: ")

#x1=2; y1=2; x2=5; y2=2; x3=5; y3=4; x4=2; y4=4
#xA=3; yA=30

if xA > x1 and xA < x2:
    if yA > y1 and yA < y4:
        print("Ponto dentro")
    else:
        print("Ponto fora")
else:
    print("Ponto fora")

Teste o código acima em: https://py3.codeskulptor.org/#user307_0Gj2aMOR6F_0.py

Nas linha 20 e 21 está comentada uma série de atribuições. Fiz isso para testar mais rápido o código e não precisar ficar fornecendo vários valores. Nesse caso, eu comentava as linhas anteriores e deixava essas atribuições.

Para os testes se o ponto informado estava dentro do retângulo, veja que não é necessário utilizar todos os pontos. O valor em y nos pontos C e D são os mesmo, assim como nos pontos A e B. Em relação aos valores de x, esse será igual em A e D e nos pontos B e C. Veja que essa minha relação de igualdade entre alguns valores das coordenadas pressupõe que o retângulo é desenhando na horizontal ou vertical. Se um retângulo na diagonal for informado, minha solução não irá funcionar.

Share

Uma opinião sobre “Solicitação de algoritmo 12 – ponto no retângulo

  1. Mel

    Explicação fantástica. Obrigada!

     
    Reply

Deixe um comentário para Mel Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.