Como identificar o subtriangle dentro de um retângulo dada uma coordenada nesse retângulo

StackOverflow https://stackoverflow.com/questions/2310794

Pergunta

Problem illustration

Dado um retângulo de largura w e altura h. e uma coordenada x, y Naquele retângulo, gostaria de identificar qual triângulo eu estou dentro.

ou seja, a função deve tomar parâmetros (x, y) e retornar a, b, c, d ou um número baseado em zero representando esse índice de triângulo isto é (0 = a, 1 = b, 2 = c, 3 = d) se forem naquela ordem.

Eu acho que isso seria algo como> = a fórmula da linha vermelha e> = a fórmula da linha verde?

Eu gostaria de implementar isso em vb.net

Foi útil?

Solução

aboveRed = x*h > y*w;
aboveGreen = (w-x)*h > y*w;
if (aboveRed)
{
    if (aboveGreen) return "C"; else return "B";
}
else
{
    if (aboveGreen) return "D"; else return "A";
}

Outras dicas

Equação da linha verde: h * x + w * y = h * w

Equação da linha vermelha: x * h - y * w = 0

Public Function GetTriangleNumber(ByVal x As Integer, ByVal y As Integer) 
                                                                     As Integer
    Dim overGreenLine As Boolean = ((((h * x) + (w * y)) - (h * w)) < 0)
    Dim overRedLine As Boolean = (((h * x) - (w * y)) > 0)
    If overGreenLine Then
        Return IIf(overRedLine, 2, 3)
    End If
    Return IIf(overRedLine, 1, 0)
End Function

Eu consideraria o ângulo da linha até o ponto, dos cantos superior esquerdo e superior direito. Se for inferior a 45 graus (ajustando a direção base da borda) em ambos os casos, o ponto está em C. Outras combinações cobrirão os outros três triângulos.

Na verdade, você não precisa calcular as funções inversas de trigo para fazer isso, pois a proporção dos comprimentos das linhas fornece informações suficientes (e pecado (45) ... ou melhor, pecado (pi/4) é um valor fixo) .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top