У мене є об'єкт кімнати, визначений колекцією петельних відрізків, на які мені потрібно обчислити площу. Класи можна описати так (у псевдокоді):
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
містити списокPoint
s, а потім отримати сегменти, з'єднавши кожну точку разом, а потім обведіть її назад. В іншому випадку, при вашому поточному налаштуванні дуже східно отримати неправильні значення (наприклад, незамкнена кімната, кімната зі стіною посередині тощо). Це був би найкращий варіант.