У меня есть объект комнаты, определенный набором циклических отрезков, для которого мне нужно вычислить площадь. Классы могут быть описаны следующим образом (в псевдокоде):
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();
}
Стены комнаты никогда не могут пересекаться нигде, кроме как в конечных точках сегментов, и любые созданные «подциклы» также будут разделены на новую комнату. Решение не обязательно должно быть идеально точным (допустимая погрешность 10%) и также не очень часто (<1 / с).
Rooms всегда было завершено, и это может быть не так, если у меня есть игрок, который собирает Rooms, используя Segments. Кроме того, функцию закрытой комнаты легко определить (просто переберите Segments и убедитесь, что они создают комнату).
Roomсодержать списокPoints, а затем получить сегменты, соединив каждую точку вместе, а затем вернув ее обратно. В противном случае, с вашей текущей настройкой, это очень восточно, чтобы получить неправильные значения (например, незакрытая комната, комната со стеной посередине и т. Д.). Это был бы лучший вариант.