C'è una differenza tra un "quadrilatero" e un "rettangolo".
Se si ha il punto medio in alto e in basso e le lunghezze dei lati, il resto è semplice.
Dato:
(x1, y1) -- (top_middle_x, top_middle_y) -- (x2, y1)
(x1, y2) -- (btm_middle_x, btm_middle_y) -- (x2, y2)
e top/bottom lunghezza insieme destra/sinistra lunghezza.
x1 = top_middle_x - top/bottom_length/2; x2 = x1 + top/bottom_length;
y1 = top_middle_y y2 = bottom_middle_y
Ovviamente, questo è il caso più semplice e supponendo che la linea di (TMX, tmy) (bmx, BMY) è unicamente lungo l'asse Y.
Chiameremo quella linea la "linea mediana".
Il trucco successivo consiste nel prendere la linea mediana e calcolarne l'offset rotazionale dall'asse Y.
Ora, il mio trigma è super arrugginito.
dx = tmx - bmx, dy = tmy - bmy.
Quindi, la tangente dell'angolo è dy/dx. L'arcotangente (dy/dx) è l'angolo della linea.
Da ciò è possibile ottenere l'orientamento.
(mente, ci sono alcune partite con quadranti, e segni, e roba per ottenere questo diritto - ma questa è l'essenza di esso.)
Una volta che avete l'orientamento, è possibile "ruotare" la linea torna all'asse Y. Cerca la grafica 2D per la matematica, è semplice.
Questo ti porta il tuo orientamento normale. Quindi calcola i punti rettangoli, in questa nuova forma normale, e infine, ruotali indietro.
Viola. Rettangolo.
Altre cose che puoi fare è "ruotare" una linea che è metà della lunghezza della linea "in alto" fino a dove è 90 gradi della linea mediana. Quindi, dì che hai una linea mediana di 45 gradi. Avviate questa linea su tmx, tmy e ruotate questa linea di 135 gradi (90 + 45). Quel punto sarebbe il tuo angolo "in alto a sinistra". Ruota -45 (45 - 90) per ottenere il punto "in alto a destra". Quindi fai qualcosa di simile con i punti più bassi.
prendo la mia risposta indietro .. Questo è risolvibile! – Dolph
Suppongo che questo possa essere ruotato da qualsiasi angolazione e non si conosce l'angolo? – Casey
@Casey, corretto. – icco