这似乎不是一个简单的问题(在各种论坛上都被问得很多),但我绝对需要它作为更复杂算法的构建模块。
输入:两个二维多边形(A和B),分别表示为由每条边[(x0, y0, x1, y2), ...]
组成的列表。点由double
对表示。我不知道它们是顺时针给出,还是逆时针给出,或者根本没有方向。我知道它们不一定是凸多边形。
输出:表示A、B和相交多边形AB的3个多边形。其中任何一个都可能是空(?)多边形,例如null
。
优化提示:这些多边形表示房间和楼层边界。因此,房间边界通常会完全与地板边界相交,除非它属于同一平面上的另一个楼层(啊!)。
我希望有人已经用C#完成了这个任务,并允许我使用他们的策略/代码,因为我到目前为止在这个问题上找到的东西相当令人望而生畏。
编辑:看来我并不是完全懦弱不敢面对这个问题。我想在这里重新说明所需的输出,因为这是一个特殊情况,可能会简化计算:
输出:第一个多边形减去所有相交的部分,交集多边形(复数也可以)。我实际上并不关心第二个多边形,只关心它与第一个多边形的交集。
编辑2:我目前正在使用GPC(通用多边形剪辑器)库,这使得它非常容易!