Tengo un objeto de habitación definido por una colección de segmentos de línea en bucle para los que necesito calcular el área. Las clases se pueden describir de la siguiente manera (en pseudocó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();
}
Las paredes de una habitación nunca pueden cruzarse en ninguna parte, pero en los puntos finales de los segmentos y cualquier "sub-bucle" creado también se separará en una nueva habitación. La solución no necesita ser perfectamente precisa (se acepta un margen de error del 10%) y tampoco se calcula con mucha frecuencia (<1 / s).
Room
s esté siempre completa, y ese puede no ser el caso si hago que el jugador construya Room
s usando Segment
s. Además, una función de sala cerrada es fácil de definir (solo recorra los Segment
correos electrónicos y asegúrese de que crean una sala).
Room
contener una lista dePoint
s, y luego obtener los segmentos conectando cada punto y luego volverlo a recorrer. De lo contrario, con su configuración actual, es muy oriental obtener valores incorrectos (por ejemplo, habitación no cerrada, habitación con pared en el medio, etc.). Esta sería la mejor opción.