math - 圆和三角形问题

标签 math geometry theory

我有一个有趣的问题,我一直在努力解决最后一阵子:

我在2D xy平面上有3个圆,每个圆都有相同的已知半径。我知道三个中心的坐标(它们是任意的,可以在任何地方)。

可以绘制的最大三角形是什么,使得三角形的每个顶点都位于一个单独的圆上,这些顶点的坐标是什么?

我一直在研究这个问题好几个小时,并问了一堆人,但是到目前为止,只有一个人能够提出一个可行的解决方案(尽管我无法证明这一点)。

我们提出的解决方案包括首先在三个圆心周围创建一个三角形。接下来,我们分别查看每个圆并计算穿过圆的中心并垂直于相对边缘的直线的方程式。然后,我们计算圆的两个交点。然后针对接下来的两个圆圈进行此操作,结果为6分。我们迭代这6个点创建的8个可能的3点三角形(限制是大三角形的每个点必须位于单独的圆上)并找到最大大小。

结果看起来合理(至少在纸上绘制时),并且通过了特殊情况,即圆心全部落在一条直线上(给出一个已知的最大三角形)。不幸的是,我无法证明这是正确的还是错误的。

我想知道是否有人遇到过类似的问题,如果是,您如何解决呢?

注意:我知道这主要是数学问题,而不是编程问题,但是它将在代码中实现,并且必须对其进行优化以使其运行非常快速高效。实际上,我已经在代码中使用了上面的解决方案,并且经过测试可以正常工作,如果您想看一眼,请告诉我,我选择不发布它,因为它全部是 vector 形式,几乎无法弄清楚到底发生了什么(因为它被浓缩为更有效)。

最后,是的,虽然不是家庭作业问题/作业/项目,但这是用于学校作业的。这是我研究生论文的一部分(仅占很小的一部分,但从技术上来说仍是其中的一部分)。

谢谢你的帮助。

编辑:这是我不久前想出的一种新算法。

从圆的中心开始,与其他两个中心画一条线。计算将创建的 Angular 二等分的线,并计算圆与穿过圆心的线之间的交点。您将获得2个结果。对其他两个圆圈重复此操作,总共可获得6分。遍历这6个点,并获得8个可能的解决方案。查找8个解决方案中的最大值。

如果您沿三个点的一个“方向”画线,则该算法将处理共线情况。

从我尝试使用CAD软件为我确定几何形状的几次随机试验中,该方法似乎优于之前所述的所有其他方法。但是,已经通过Victor的反例之一证明它不是最佳解决方案。

出于某种原因,我明天将对此进行编码,由于某种原因,我无法远程访问我的大学计算机,并且大多数内容都在其中。

最佳答案

我可以自由地提交第二个答案,因为我最初的答案是指人们可以通过玩在线应用来获得洞察力的在线应用程序。答案更多是几何论证。

我希望下图说明发生了什么。这很大程度上是受@Federico Ramponi的观察启发的,该观察发现最大的三角形的特征是每个顶点的切线平行于相反侧。

图片是使用出色的桌面程序Geometry Expressions的试用版制作的。该图显示了以点AEC为中心的三个圆圈。它们具有相等的半径,但是图片实际上并不取决于半径是否相等,因此该解决方案可以推广到不同半径的圆。线MNNOOM与圆切线,并分别在点IHG处触摸圆。后面的点形成内部三角形IHG,它是我们要最大化其大小的三角形。

还有一个外部三角形MNO与内部三角形相同,这意味着其侧面与IHG的侧面平行。

@Federico观察到IHG具有最大的面积,因为沿对应的圆移动其任何顶点都会产生一个三角形,该三角形的底边相同但高度较小,因此面积较小。换句话说,如果用三个圆上的t1t2t3角(如@Charles Stewart所指出,以及我最陡峭的下降 Canvas 应用程序中所使用的)对三角形进行参数化, (t1,t2,t3)的面积为(0,0,0),面积为极值(图中最大)。

那么该图如何计算?我会提前承认我还没有完整的故事,但这是一个开始。给定三个圆圈,选择一个点M。在以EC为中心的圆上绘制切线,并将切线点指定为GI。在以OHN为中心,与A平行的圆上绘制正切GI。这些都是代数和几何上相当简单的运算。

但是我们还没有结束。到目前为止,我们仅具有OHNGI平行的条件。我们无法保证MGOIH平行或MINGH平行。因此,我们必须返回并优化M。在交互式几何程序中,先进行设置然后再移动M直到满足后者的并行条件(无论如何,都是眼花)乱)没什么大不了的。几何表达式创建了该图,但是我使用了一些技巧使其得以实现,因为它的约束求解器显然没有足够的功能来完成此工作。 GIH的代数表达式相当简单,因此应该基于M是一个平行四边形(无论是显式的还是数字的)来求解MIHG

我应该指出,通常,如果您从M开始遵循构造,则每个圆都有两个切线选择,因此有八个可能的解决方案。与其他尝试解决该问题的方法一样,除非您有很好的启发方法来帮助您提前选择要计算的切线,否则您应该计算所有八个可能的三角形并找到面积最大的三角形。就最小面积或鞍点而言,其他七个将是极值。

而已。这个答案不是很完整,因为它使M的最终计算有些开放。但是,它被简化为2D搜索空间,或者是一个笨拙的方程式的解决方案,而不是庞大的方程式。

最后,我必须不同意@Federico的结论,该结论证实了OP提出的解决方案是最佳的。的确,如果您从圆心到内部三角形的相对边缘绘制垂直线,那么这些垂直线将与圆相交,从而为您提供三角形顶点。例如。 H位于A垂直于GI的直线上),但这与最初提出的解决方案不同(后者是通过A并垂直于EC的直线-通常EC不平行于GI)。

关于math - 圆和三角形问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588943/

相关文章:

c++ - 如何确定一个数字的基数?

javascript - 如何四舍五入到小数点后两位?

clojure - Clojure 代理模型的历史

c++ - 合并共享一个共同元素的对

java - Android - 计算并存储算术表达式的答案

geometry - 关于 BSpline 的问题

algorithm - 比较 N 维空间中两组点的更快方法?

opengl - 在opengl中计算球体

javascript - Object(o) 的合法使用