La soluzione più semplice, e presumo quella che è più probabile che stiate cercando, consiste nel calcolare il riquadro di delimitazione allineato all'asse, che è semplicemente il caso di trovare i valori min/max x & y, quindi costruendo una scatola da quelli.
ti darò pseudo-codice per questo, dato che non avete pubblicato i tipi che la geometria è espresso in ...
type point { float x; float y; }
type box { point topleft; point topright; point bottomleft; point
function bounding_box(points)
{
xmin = min(points.x)
xmax = max(points.x)
ymin = min(points.y)
ymax = max(points.y)
return new box{
topleft = { x = xmin, y = ymax },
topright = { x = xmax, y = ymax },
bottomleft = { x = xmin, y = ymin },
bottomright = { x = xmax, y = ymin }
};
}
Quindi, dato questi:
point[] points = [[x = -2, y = 0], [x = 1, y = 2], [x = 1, y = 1], [x = -1, y = -2]];
box bounds = bounding_box(points);
Tutti i seguenti sarà vero:
bounds.topleft == [x = -2, y = 2];
bounds.topright == [x = 1, y = 2];
bounds.bottomleft == [x = -2, y = -2];
bounds.bottomright == [x = -1, y = -2];
Naturalmente, se il sistema di coordinate ha le coordinate bassi al t op (ad es. come un tipico display) - quindi è necessario invertire il calcolo; o calcola prima il risultato nello spazio-oggetto e poi traduci nello spazio logico in seguito.
Avviso Sono andato per un tipo per la casella che esprime tutti i quattro angoli, nel caso in cui si decida in futuro di aggiornare ad una casella arbitrariamente allineata in futuro (anche se per lo stesso token si potrebbe semplicemente usare un punto + 2 vettori per quello).
Purtroppo non ho idea da dove cominciare con questo problema. Sono nella fase in cui ho le mie coordinate in una lista di stringhe di caratteri e sono incerto su come procedere da qui. – CSharpened
@Bene ci sono due tipi: il riquadro di delimitazione allineato all'asse; che si trova semplicemente trovando il min x/y e il massimo x/y. O hai il bounding box arbitrariamente orientato che è più complicato (http://en.wikipedia.org/wiki/Minimum_bounding_box_algorithms). Questo è reso più complicato se devi tener conto della curvatura della terra (che spero non lo fai), anche se tecnicamente stai ancora disegnando una scatola, ma in realtà è una sezione della superficie di una sfera (probabilmente troppo per quello che ti serve) –
Vedo. Ho bisogno di una funzione che fornisca 4 coordinate per la scatola. Quindi i due valori X e i due valori Y. Suggeriresti che il modo migliore per farlo sarebbe dividere le mie coordinate e poi confrontarle tutte per trovare il valore X più basso e il valore Y minimo? Se dovessi farlo, suppongo che otterrei solo un valore minX e un valore maxY?Da quelle due cifre è possibile calcolare gli altri valori X e Y? Scusa se mi sembra un po 'perso. Spaziale non è affatto la mia area. – CSharpened