检查reuleaux三角形是否在C

时间:2018-10-06 00:24:43

标签: algorithm geometry computational-geometry geometry-surface

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

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

首先,我尝试查看顶点是否在形状内,就像我将边缘用作原始大圆的一部分(以顶点为中心)一样,或者尝试如果上面提到的其他形状的一部分与之相交(圆形比带有直线边缘的形状更容易混淆),但是我卡住了,因为我不知道如何限制角度或其他东西,因此我只能扫描要测试的弧形部分,实际上很难进行设置进行相交检测的测试。

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

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

2 个答案:

答案 0 :(得分:1)

找到另一种形状与围绕Reuleaux三角形的角A的圆的交点,以及另一种形状的顶点位于围绕A的圆内的其他形状的顶点(在下面的图像中这四个点都是黑色的) 。

然后检查这些点中的任何一个是否位于线AB的右侧和线AC的左侧(即图像中的红色部分; 4个黑点中的2个确实存在,所以形状相交)。

Reuleaux Triangle and Pentagon

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

此外,如果整个Reuleaux三角形位于另一个形状内,则应检查拐角A,B和C是否位于另一个形状内。

应该可以通过组合已有的圆和三角形功能(的一部分)来做到这一点。

答案 1 :(得分:1)

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

首先找到所有事件点,即弧和线段的端点,再加上水平相切点,然后按纵坐标对它们进行排序,以在“平板”中分割平面。

enter image description here

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

enter image description here

如果水平边确实重叠,则可以确保两个形状重叠。但是即使它们没有重叠,它们之间仍然可能存在重叠。为此,您需要检测侧面的交点。两个圆和/或线段的相交公式不太困难。如果找到交叉点,则需要通过在纵坐标上进行测试来检查它们是否属于当前平板。

enter image description here