面積を計算する必要があるループ線セグメントのコレクションによって定義された部屋オブジェクトがあります。クラスは次のように記述できます(擬似コードで)。
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
Room
リストをPoint
含めてから、各ポイントを接続してセグメントを取得し、それをループバックする方が理にかなっています。それ以外の場合、現在の設定では、不正な値を取得することは非常に東です(閉じられていない部屋、壁が真ん中にある部屋など)。これが最良のオプションです。