我需要计算2D多边形的面积。 (任何形状,任何尺寸等......)
我只有点列表,每个点都包含X和Y.
多边形位于二维块图中,因此:
但是因为我必须使用块/矩形,然后多边形看起来更像:
所以必须计算一下:
块在区域内,仅当块的多于50%在多边形中时OR是该多边形的角/点(如图像底部的这个臂)。
有可能计算出来吗?没有得到最小点和最大点,并检查每一个块...
我只找到了一些普通多边形的代码:
public int getArea(List<BlockVector2D> blockPoints)
{
double result = 0;
int j = blockPoints.size() - 1;
for (int i = 0; i < blockPoints.size(); ++i)
{
result += (blockPoints.get(j).getBlockX() + blockPoints.get(i).getBlockX()) * (blockPoints.get(j).getBlockZ() - blockPoints.get(i).getBlockZ());
j = i;
}
return (int) Math.abs(result / 2);
}
但我不知道如何使用blocks-point ...
左。对不起大小和奇怪的图片......以及我的英文。
答案 0 :(得分:2)
查看这个算法,它有点复杂,但解释了你需要的东西。
答案 1 :(得分:0)
我没有一个完美的解决方案,只是一个想法......(也许是愚蠢的,不能保证):
我知道你需要非常快速地计算它。所以遍历各个方面,如:
area = 0;
foreach(point p : points) {
area += testIfInsidePolygon(p);
}
不是一种选择。
我认为没有解决这个问题的分析方法会导致你提供的这种好算法。所以我的想法是:
极有可能需要进行特殊情况修正:)
该算法比遍历所有点的O(n ^ 2)快得多。但是,您需要付出复杂的代价。