【问题标题】:Area of intersecting triangles [closed]相交三角形的面积[关闭]
【发布时间】:2012-10-26 16:05:15
【问题描述】:

我想解决一个问题,但这有点难,我需要一些帮助。问题是:

我们有 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。

我应该如何编写程序来解决这个问题?

【问题讨论】:

  • 闻起来好像有人不想做作业。
  • 这不是家庭作业,我正在处理它为什么给出否定我不知道我
  • @ZiDom - 我们周五收到!该人可以将问题简化为找出两条线相交。我 13 岁时就完成了这个问题!
  • 我预计大多数接近投票是两件事的结果:1)您的原始问题没有标点符号,这给人的印象是您没有努力提出问题。 2) 你没有向我们展示你到目前为止所做的尝试,这给人的印象是你没有努力解决这个问题。

标签: c++ c algorithm math


【解决方案1】:

相交三角形(以及一般的凸多边形)的问题比看起来要难,尤其是如果您想在线性时间内解决它 strong> 关于所涉及的边数。

您可以考虑this page 来了解一般凸多边形的工作算法(该算法基于rotating calipers。确实,背后有一些抽象几何,特别是geometric Hanh-Banach theorem)。

考虑一下,一旦你有了交集多边形,它是凸的,评估 area 是微不足道的。


因此,您有两个选择:

  1. 您将问题抽象化(不知何故,您将三角形视为凸多边形,仅此而已)并且可以通过 GPC library(即用 C 编写),或者,例如,通过boost::geometry

  2. 你只专注于三角形:在这种情况下,我的建议是考虑这个 wonderful paper,它在拓扑上详细说明了可能涉及的相交方式,以及给出了解决方案的有效实施。

我还有一件事要说:当您考虑 玩具三角形 的问题(即低偏度,尺寸远大于机器精度)时,您仍然可以考虑实现自己的算法并使用它。但是,当您必须每秒与数百万个可能的病态三角形相交时,您最好依赖一个良好且快速的库。

【讨论】:

  • 如果有人有兴趣,我可以扩展我的答案,提供有关问题拓扑和相关计算问题的参考。
  • 我愿意。哦,为 GPC 库 +1
  • 如果可以的话,对我来说非常好,谢谢
  • @ZiDoM,还有什么问题吗?
  • @Acorbe 我正在阅读你给我的参考资料,如果我有问题,我想自己编写代码,因为你的回答,我会说谢谢
猜你喜欢
  • 1970-01-01
  • 2015-10-15
  • 2021-12-21
  • 2014-12-06
  • 2015-07-29
  • 2010-10-07
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多