自相交多边形的面积
考虑一个潜在的自相交多边形,由2D空间中的一系列顶点定义。例如 {{0, 0}, {5, 0}, {5, 4}, {1, 4}, {1, 2}, {3, 2}, {3, 3}, {2, 3}, {2, 1}, {4, 1}, {4, 5}, {0, 5}} 有几种方法可以定义这种多边形的面积,但是最有趣的一种是奇偶规则。选取平面中的任何点,从该点到无穷远(沿任何方向)画一条线。如果该线与多边形交叉的次数是奇数次,则该点是该多边形区域的一部分;如果该线与多边形交叉的次数是偶数,则该点不属于多边形的一部分。对于上面的示例多边形,这是它的轮廓以及奇数面积: 多边形通常不会正交。我只选择了这样一个简单的示例,以便更轻松地计算面积。 此示例的区域为17(不是,24或者33不像其他定义或区域那样)。 请注意,在此定义下,多边形的面积与其缠绕顺序无关。 挑战 给定具有定义多边形的整数坐标的顶点列表,请确定其在奇偶规则下的面积。 您可以编写函数或程序,通过STDIN或最接近的替代方法,命令行参数或函数参数获取输入,然后返回结果或将结果打印到STDOUT或最接近的替代方法。 您可以采用任何方便的列表或字符串格式的输入,只要不进行预处理即可。 结果应该是浮点数,精确到6个有效数字(十进制),或者是一个有理结果,其浮点表示形式精确到6个有效数字。(如果您得出合理的结果,它们可能会是准确的,但是我不能要求这样做,因为我没有确切的结果可供参考。) 您必须能够在合理的台式机上在10秒内解决以下每个测试用例。(此规则有一定的余地,因此请使用您的最佳判断。如果在我的笔记本电脑上花费20秒,我会带给您疑问的好处,如果花费一分钟,我不会。)我认为这个限制应该非常大方,但是应该排除那些仅在足够细的网格上离散多边形并计数的方法,或者使用诸如蒙特卡洛这样的概率方法。做一个好运动员,不要试图优化这些方法,以使您无论如何都可以满足时间限制。;) 您不得使用任何与多边形直接相关的现有功能。 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。 假设条件 所有的坐标都在范围内的整数0 ≤ x ≤ 100,0 ≤ y ≤ 100。 会有至少3在最50顶点。 不会有任何重复的顶点。顶点也不会位于另一边上。(不过,列表中可能有共线的点。) 测试用例 …