Ci sono due punti (x1, y1)
e (x2, y2)
, ognuno dei quali può essere una qualsiasi coppia di interi reali. Questi definiscono un rettangolo R
con i vertici {(x1, y1), (x2, y2), (x1, y2), (x2, y1)}
. Il rettangolo esiste in un sistema di coordinate dove (0, 0)
è l'angolo in alto a sinistra dello schermo, positivo y è in basso e positivo x è giusto. Ho bisogno di calcolare il più grande possibile quadrato S
legato da R
che ha per uno dei suoi angoli il punto (x1, y1)
.
Il mio algoritmo è:
-
dati i vertici (x1, y1) e (x2, y2)
-
Calcola la larghezza e l'altezza del rettangolo e memorizza la dimensione più piccola.
-
Se x2 > x1 e y2 < y1, restituisci il quadrato di dimensione con l'angolo in alto a sinistra (dimensione x1 +, dimensione y1)
-
Se x2 < x1 e y2 < y1, restituisci il quadrato di dimensione con l'angolo in alto a sinistra (x1 - dimensione, y1 - dimensione)
-
Se x2 < x1 e y2 > y1, restituisce il quadrato di dimensione con l'angolo in alto a sinistra (x1 - dimensione, y1)
-
Se x2 > x1 e y2 > y1, restituisce il quadrato di dimensione con l'angolo in alto a sinistra (x1 + size, y1)
Tuttavia, sembra che ci debba essere un modo più efficiente. Qualche idea?
Modifica
Contesto: ho bisogno di disegnare un quadrato cliccando e trascinando il mouse. Il mouse iniziale verso il basso è un angolo. Il quadrato è definito dal minimo tra l'altezza e la larghezza del rettangolo formato trascinando il mouse. Il quadrato deve espandersi in tutte e quattro le direzioni possibili, ma la struttura dei dati mi consente solo di mantenere il quadrato come un punto in alto a sinistra e una dimensione.