У меня есть объект комнаты, определенный набором циклических отрезков, для которого мне нужно вычислить площадь. Классы могут быть описаны следующим образом (в псевдокоде):
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 / с).
Room
s всегда было завершено, и это может быть не так, если у меня есть игрок, который собирает Room
s, используя Segment
s. Кроме того, функцию закрытой комнаты легко определить (просто переберите Segment
s и убедитесь, что они создают комнату).
Room
содержать списокPoint
s, а затем получить сегменты, соединив каждую точку вместе, а затем вернув ее обратно. В противном случае, с вашей текущей настройкой, это очень восточно, чтобы получить неправильные значения (например, незакрытая комната, комната со стеной посередине и т. Д.). Это был бы лучший вариант.