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).
Room
her zaman s'nin eksiksiz olmasını gerektiriyor ve eğer oyuncu Room
s kullanarak Segment
s oluşturuyorsa, durum böyle olmayabilir . Ayrıca, kapalı oda işlevini tanımlamak kolaydır (sadece Segment
s boyunca döngü yapın ve bir oda oluşturduklarından emin olun).
Room
listesi içermesiPoint
ve 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.