Calcola il quadrato più grande nel rettangolo con un vertice dato

0

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 è:

  1. dati i vertici (x1, y1) e (x2, y2)

  2. Calcola la larghezza e l'altezza del rettangolo e memorizza la dimensione più piccola.

  3. Se x2 > x1 e y2 < y1, restituisci il quadrato di dimensione con l'angolo in alto a sinistra (dimensione x1 +, dimensione y1)

  4. Se x2 < x1 e y2 < y1, restituisci il quadrato di dimensione con l'angolo in alto a sinistra (x1 - dimensione, y1 - dimensione)

  5. Se x2 < x1 e y2 > y1, restituisce il quadrato di dimensione con l'angolo in alto a sinistra (x1 - dimensione, y1)

  6. 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.

    
posta AaronF 15.09.2016 - 03:19
fonte

1 risposta

1

La dimensione massima di un quadrato delimitata da un rettangolo sarà il quadrato del lato più corto di quel rettangolo. Tutto quello che devi capire è l'altezza e la larghezza. Determina quale è più piccolo. Imposta quel valore come il lato del quadrato e poi quadrato per ottenere l'area per standard.

Esempi:

    
risposta data 15.09.2016 - 03:41
fonte

Leggi altre domande sui tag