Alan hesaplamak için gereken döngü çizgi parçalarının bir koleksiyon tarafından tanımlanan bir oda nesnesi var. Sınıflar aşağıdaki şekilde (sözde kodda) tanımlanabilir:
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();
}
Bir odanın duvarları asla hiçbir yerde kesişemez, ancak segmentlerin uç noktalarında ve oluşturulan "alt döngüler" de yeni bir odaya ayrılacaktır. Çözeltinin mükemmel bir şekilde doğru olması gerekmez (% 10 hata payı kabul edilebilir) ve aynı zamanda çok sık hesaplanmaz (<1 / s).
Roomher zaman s'nin eksiksiz olmasını gerektiriyor ve eğer oyuncu Rooms kullanarak Segments oluşturuyorsa, durum böyle olmayabilir . Ayrıca, kapalı oda işlevini tanımlamak kolaydır (sadece Segments boyunca döngü yapın ve bir oda oluşturduklarından emin olun).
Roomlistesi içermesiPointve daha sonra her bir noktayı birbirine bağlayıp daha sonra tekrar döngüye sokması daha anlamlı olacaktır . Aksi takdirde, mevcut kurulumunuzla yanlış değerler elde etmek çok doğudur (örn. Kapatılmamış oda, ortada duvarlı oda vb.). Bu en iyi seçenek olacaktır.