Eu tenho um objeto de sala definido por uma coleção de segmentos de linha em loop para os quais preciso calcular a área. As classes podem ser descritas da seguinte maneira (em pseudo-código):
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();
}
As paredes de uma sala nunca podem se cruzar em lugar algum, mas nos pontos finais dos segmentos e quaisquer "sub-loops" criados também serão separados em uma nova sala. A solução não precisa ser perfeitamente precisa (margem de erro de 10% é aceitável) e também não é calculada com muita frequência (<1 / s).
Room
conter uma lista dePoint
s e, em seguida, obter os segmentos conectando cada ponto e, em seguida, repetindo-o. Caso contrário, com a sua configuração atual, é muito leste para obter valores incorretos (por exemplo, sala não fechada, sala com parede no meio, etc.). Essa seria a melhor opção.