면적을 계산 해야하는 루핑 선 세그먼트 모음으로 정의 된 룸 객체가 있습니다. 클래스는 다음과 같이 설명 할 수 있습니다 (의사 코드로).
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 / s).
다른 옵션은 모양을 위쪽으로 삼각 측량하고 각 삼각형의 면적을 계산하는 것입니다. 어려운 부분은 삼각 측량입니다. 가능하지만 항상 예쁘지는 않습니다. 신발 끈 답은 여전히 낫습니다.
—
Draco18s는 더 이상 SE
Room
의 목록을 포함하고Point
각 지점을 연결하여 세그먼트를 가져 와서 다시 반복하는 것이 더 합리적입니다 . 그렇지 않으면 현재 설정에서 잘못된 값 (예 : 닫히지 않은 방, 중간에 벽이있는 방 등)을 얻는 것이 매우 동쪽입니다. 이것이 최선의 선택입니다.