我想解决一个问题,但这有点难,我需要一些帮助。问题是:
我们有2个三角形,我们有顶点的坐标,如(x1,y1),(x2,y2),(x3,y3),(a1,b1),(a2,b2),(a3, B3)。 我们想要测量两个三角形彼此相对的区域。它可能是0或更多。
例如,如果我们有第一个三角形(0,0)(3,0)(0,3)和第二个(0,0)(3,3)(3,0),公共区域将是2.25。
我应该如何编写程序来解决这个问题?
答案 0 :(得分:6)
交叉三角形(和凸多边形一般)的问题比看起来强烈强硬,特别是如果你想在线性时间内解决它强>相对于所涉及的边数。
您可以考虑this page了解一般凸多边形的工作算法(算法基于rotating calipers。实际上,背后有一些抽象几何,特别是{{3 }})。
考虑到一旦你有交叉多边形,它是凸的,评估geometric Hanh-Banach theorem是微不足道的。
因此,您有两种选择:
你保持问题抽象(不知何故你认为三角形是凸多边形,就是这样)并且可以通过area实现C / C ++中的快速解决方案(这是用C)编写的,或者,例如,通过GPC library。
你专注于三角形:在这种情况下,我的建议是考虑这个 boost::geometry ,它在拓扑上详细说明了交叉涉及的可能方式,并提供有效的解决方案实施。
我还有一件事要说:当你考虑玩具三角形的问题(即低偏度,尺寸大于机器精度)时,你仍然可以考虑实现自己的算法并使用它。但是,当你必须每秒交叉数百万个可能病态的三角形时,你最好依赖一个好的和快速的库。