Come identificare subtriangle all'interno di un rettangolo dato un coordinata in quel rettangolo

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

Domanda

Problema illustrazione

Dato un rettangolo di larghezza w e altezza h. e una x, y in quel rettangolo di coordinate desidero identificare quali triangolo sono all'interno.

vale a dire. la funzione dovrebbe prendere parametri (x, y) e ritorno a, b, c, d oppure un numero zero basato rappresentare tale indice triangolo cioè (0 = A, 1 = B, 2 = C, 3 = D) qualora siano quell'ordine.

Credo che questo sarebbe qualcosa di simile> = la formula della linea rossa e> = la formula della linea verde?

mi piacerebbe implementare questo in VB.NET

È stato utile?

Soluzione

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";
}

Altri suggerimenti

L'equazione della linea verde: h * x + w * y = h * w

L'equazione della linea rossa: 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

Vorrei prendere in considerazione l'angolo della linea fino al punto da angoli superiori sinistro e destro superiori. Se è inferiore a 45 gradi (regolazione per la direzione di base del bordo) in entrambi i casi il punto si trova in C. Altre combinazioni copriranno gli altri tre triangoli.

Non è effettivamente necessario calcolare funzioni trigonometriche inverse per fare questo, come il rapporto tra la lunghezza delle linee ti dà abbastanza informazioni (e il peccato (45) ... o meglio sin (pi / 4) è un valore fisso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top