Detectando planos verticais
Eu queria saber se alguém conseguiu identificar planos verticais à frente do dispositivo em tempo real usando o ARCore SDK.
Consegui alcançar um resultado decente definindo uma parede usando uma equação de linha:
z = Multiplier * x + Constant (For every y)
com o comentário "para cada y", quis dizer que ignoro o eixo y (olhando a parede de cima como no mapeamento 2D de uma sala) para calcular uma linha que define a parede.
o multiplicador é a rotação entre os pontos:
let angleDeg = Float((360 - angle + 360) % 360) * Float.pi / 180.0;
Todo o cálculo é:
let angle: Int = Int((atan2(pointA.z - pointB.z, pointA.x - pointB.x) * 180) / Float.pi) % 360
yRotation = Float((360 - angle + 360) % 360) * Float.pi / 180.0
if pointA.x == pointB.x {
multiplier = Float.infinity
} else {
multiplier = (pointA.z - pointB.z) / (pointA.x - pointB.x)
}
constant = pointA.z - multiplier * pointA.x
}
Agora, aciono esse cálculo enquanto o usuário está andando e mostra muitos pontos da nuvem de pontos.
Os resultados são bons, mas não tão precisos quanto a detecção do plano horizontal do ARCore.