Nesta atividade, você deve escrever um programa que calcule as três distâncias clássicas em PDI: Euclidiana (L2), City‑Block (L1) e Chessboard (L∞).
d_Euclidiana = √((B_x - A_x)^2 + (B_y - A_y)^2)
d_City-block = |B_x - A_x| + |B_y - A_y|
d_Chessboard = \max\big(|B_x - A_x|,\; |B_y - A_y|\big)
📌 Importante:
math.sqrt, abs (ou fabs) e max.Em uma imagem 1000×1000 pixels (1 milhão de pixels), calcular a distância de cada pixel a um ponto de referência exige 1 milhão de operações. A escolha da métrica afeta o desempenho:
| Métrica | Operações por pixel | Custo relativo (1M pixels) | Quando usar |
|---|---|---|---|
| Euclidiana (L2) | 2 subtrações, 2 multiplicações, 1 soma, 1 sqrt |
🔴 Mais custosa – sqrt é cara |
Distância “real” no espaço contínuo |
| City‑block (L1) | 2 subtrações, 2 abs, 1 soma |
🟡 Moderada – sem raiz quadrada | Grids, robótica, imagens binárias |
| Chessboard (L∞) | 2 subtrações, 2 abs, 1 max |
🟢 Mais eficiente | Movimentos de peças, morfologia |
A função sqrt é computacionalmente mais cara que operações como adição, subtração, multiplicação e valor absoluto. Em CPUs modernas, a diferença pode ser pequena (cerca de 1,5× a 3×), mas em sistemas embarcados ou em laços de milhões de iterações, qualquer ganho importa. Por isso, quando o objetivo é apenas comparar distâncias (ex.: encontrar o ponto mais próximo), use a distância euclidiana ao quadrado.
Entrada:
Uma única linha com quatro números reais: Ax Ay Bx By
Saída:
Três linhas, cada uma com um número real de duas casas decimais (Euclidiana, City‑block, Chessboard).
| Entrada | Saída | Observação |
|---|---|---|
0034 |
5.007.004.00 |
Triângulo 3‑4‑5 |
0011 |
1.412.001.00 |
Diagonal unitária |
Exemplo de teste de sqrt em Python, com timeit isolando cada operação:
Clique e arraste os pontos A ou B no plano cartesiano ou ajuste suas coordenadas abaixo para comparar as três métricas de distância em tempo real.