首页 > 解决方案 > 检查reuleaux三角形是否在C中的三角形/五边形/圆形内部/外部

问题描述

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

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

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

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

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

标签: algorithmgeometrycomputational-geometrygeometry-surface

解决方案


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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述


推荐阅读