Mam obiekt pokoju zdefiniowany przez kolekcję zapętlonych segmentów linii, dla których muszę obliczyć powierzchnię. Klasy można opisać następująco (w pseudokodzie):
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();
}
Ściany pokoju nigdy nie mogą się przecinać, ale w punktach końcowych segmentów, a wszelkie utworzone „pętle podrzędne” również zostaną rozdzielone na nowe pomieszczenie. Rozwiązanie nie musi być idealnie dokładne (dopuszczalny margines błędu 10%), a także nie jest obliczane bardzo często (<1 / s).
Room
s było zawsze kompletne, i może się tak nie zdarzyć, jeśli odtwarzacz zbuduje je Room
za pomocą Segment
s. Ponadto, funkcja zamkniętego pokoju jest łatwa do zdefiniowania (po prostu przejdź przez Segment
s i upewnij się, że tworzą pokój).
Room
listyPoint
s, a następnie pobranie segmentów przez połączenie każdego punktu razem, a następnie zapętlenie go z powrotem. W przeciwnym razie, przy obecnej konfiguracji, otrzymanie nieprawidłowych wartości (np. Niezamknięty pokój, pokój ze ścianą pośrodku itp.) Jest bardzo na wschód. To byłaby najlepsza opcja.