我有一个由循环线段集合定义的房间对象,我需要为其计算面积。这些类可以描述如下(用伪代码):
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
s 的列表,然后通过将每个点连接在一起来获得分段,然后将其循环回去,这将更有意义。否则,在您当前的设置下,获取不正确的值(例如,不封闭的房间,中间有墙的房间等)在很东边。这将是最佳选择。