【问题标题】:Check if a reuleaux triangle is inside/outside a triangle/pentagon/circle in C检查reuleaux三角形是否在C中的三角形/五边形/圆形内部/外部
【发布时间】:2019-03-11 11:55:12
【问题描述】:

您可以在此处检查 Reuleaux 三角形的定义: https://en.wikipedia.org/wiki/Reuleaux_triangle

我一直在处理几何 2D 形状并进行检查,设置测试以查看它们是否与另一个相交,或者在另一个形状内(包括触摸)。我测试了圆(以 Point 类型为中心,以 double x,y 属性为坐标,以及 double 半径),三角形(三个顶点Point),五边形(五个顶点Point),但是我发现了一个有趣的形状,叫做reuleaux triangle,它是由三个圆组成的,并且弧边到对边的顶点的距离相同。

首先,我尝试查看顶点是否在形状内部,就好像我使用边缘作为原始大圆的一部分一样(圆圈比直边形状更令人困惑),但我坚持,因为我不知道如何限制角度或其他东西,所以我只能扫描要测试的这部分弧,实际上很难设置检测相交的测试。

我试图找到从顶点到边缘中点的距离,并将其视为六边形,但在小弧段中总是有更多的空间不会被包括在内。现在我不知道要设置一种新方法来测试这个奇怪的圆形三角形是否会在我已经找到一种测量位置关系的方法的内部/外部/相交/接触任何形状(圆形、三角形、五角形)。

那么您对此有何看法?也许形成这个三角形的三个大圆圈会有所帮助?

【问题讨论】:

  • 您可以使用愚蠢三角形的质心与另一个对象之间的夹角来将搜索限制在位于该向量任一侧的对象的两个象限内。有没有一种简单的算法可以用来识别特殊三角形的每个边缘坐标?您可以测试这些是否穿透您的其他对象。
  • 我将从两个对象中心之间的线的交点开始沿边缘进行二分搜索,然后在任一侧逐渐检查。我确信有一些优化可以应用于近似每条曲线的多面体。
  • @jwdonahue 感谢您的提醒。下次我会尝试明智地使用我的标签。我认为最难的部分是弄清楚如何用几何方法确定它,然后我很容易用代码实现它。代码不是我的主要问题,很抱歉造成混淆:)现在我快到了,但仍然感谢您的建议!

标签: algorithm geometry computational-geometry geometry-surface


【解决方案1】:

找到另一个形状与 Reuleaux 三角形角 A 周围的圆的交点,以及位于 A 周围圆内的另一个形状的顶点(这些是下图中的 4 个黑点) .

然后检查这些点中的任何一个是否位于 AB 线的右侧和 AC 线的左侧(即图像中的红色扇区;4 个黑点中有 2 个位于,因此形状相交)。

对 B 和 C 周围的圆执行相同操作。这将为您提供 Reuleaux 三角形和其他形状的所有交点,以及 Reuleaux 三角形内的其他形状的所有顶点。

此外,您应该检查角 A、B 和 C 是否位于另一个形状内,以防整个鲁洛三角形在另一个形状内。

应该可以通过组合你已经拥有的圆形和三角形的(部分)函数来做到这一点。

【讨论】:

    【解决方案2】:

    这是处理所有曲线凸多边形的通用方法,使用扫描线方法。

    首先找到所有的事件点,即圆弧和线段的端点,加上水平切点,并按纵坐标排序,将平面分割成“slabs”。

    板定义了“曲线梯形”,由两个水平边(可能退化)和两个单调的弧或线段分隔。

    如果水平边确实重叠,则可以确定两个形状重叠。但即使他们不这样做,两者之间仍然可能存在重叠。为此,您需要检测边的交叉点。两个圆和/或线段的交点公式并不太难。如果发现交叉点,则需要通过纵坐标测试来检查它们是否属于当前平板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      相关资源
      最近更新 更多