Ich habe ein Raumobjekt, das durch eine Sammlung von Liniensegmenten definiert ist, für die ich die Fläche berechnen muss. Die Klassen können wie folgt beschrieben werden (in Pseudocode):
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();
}
Die Wände eines Raums können sich niemals irgendwo schneiden, sondern an den Endpunkten der Segmente. Außerdem werden alle erstellten "Teilschleifen" in einen neuen Raum aufgeteilt. Die Lösung muss nicht absolut genau sein (10% Fehlerquote sind akzeptabel) und wird auch nicht sehr oft berechnet (<1 / s).
Room
s immer vollständig sein muss und dies möglicherweise nicht der Fall ist, wenn der Player das Room
s mit Segment
s erstellt. Außerdem ist eine Funktion für geschlossene Räume einfach zu definieren (durchlaufen Sie einfach die Segment
s und stellen Sie sicher, dass sie einen Raum erstellen).
Room
eine Liste vonPoint
s zu enthalten , und dann die Segmente zu erhalten, indem jeder Punkt miteinander verbunden und dann in einer Schleife wieder herumgeführt wird. Andernfalls ist es bei Ihrer aktuellen Konfiguration sehr östlich, falsche Werte zu erhalten (z. B. nicht geschlossener Raum, Raum mit Wand in der Mitte usw.). Dies wäre die beste Option.