Ho un oggetto room definito da una raccolta di segmenti di linea ciclica per i quali devo calcolare l'area. Le classi possono essere descritte come segue (in pseudo-codice):
class Point {
float x;
float y;
...
float distanceFrom(Point p);
}
class Segment {
Point start;
Point end;
...
float length();
}
class Room {
List<Segment> walls;
...
float area();
}
Le pareti di una stanza non possono mai intersecarsi da nessuna parte, ma ai punti finali dei segmenti e anche eventuali "circuiti secondari" creati verranno separati in una nuova stanza. Non è necessario che la soluzione sia perfettamente accurata (il margine di errore del 10% è accettabile) e inoltre non viene calcolato molto spesso (<1 / s).
Room
s sia sempre completa, e potrebbe non essere il caso se il giocatore costruisce Room
i messaggi usando Segment
s. Inoltre, una funzione di stanza chiusa è facile da definire (basta scorrere le Segment
s e assicurarsi che creino una stanza).
Room
contenere un elenco diPoint
s, quindi ottenere i segmenti collegando ogni punto insieme e quindi ricircolarlo. Altrimenti, con la tua configurazione attuale, è molto a est ottenere valori errati (ad es. Stanza non chiusa, stanza con muro in mezzo, ecc.). Questa sarebbe l'opzione migliore.