Math 圆与三角形问题

Math 圆与三角形问题,math,geometry,theory,Math,Geometry,Theory,我有一个有趣的问题,在过去的一段时间里我一直在努力解决: 在2D xy平面上有3个圆,每个圆的已知半径相同。我知道三个中心的坐标(它们是任意的,可以在任何地方) 可以绘制的最大三角形是什么,使得三角形的每个顶点位于一个单独的圆上,这些垂直的坐标是什么 我已经研究这个问题好几个小时了,问了很多人,但到目前为止,只有一个人能够提出一个合理的解决方案(尽管我没有办法证明) 我们提出的解决方案包括首先创建一个围绕三个圆心的三角形。接下来,我们分别观察每个圆,并计算一条线的方程,该线穿过圆的中心,垂直于对

我有一个有趣的问题,在过去的一段时间里我一直在努力解决:

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

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

我已经研究这个问题好几个小时了,问了很多人,但到目前为止,只有一个人能够提出一个合理的解决方案(尽管我没有办法证明)

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

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

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

注意:我知道这主要是一个数学问题,而不是编程,但是它将在代码中实现,并且必须进行优化,以快速高效地运行。事实上,我已经有了上面的代码解决方案,并且经过测试可以正常工作,如果你想看一看,请让我知道,我选择不发布它,因为它都是向量形式的,几乎不可能准确地知道发生了什么(因为它被压缩为更高效)

最后,是的,这是学校作业,虽然它不是家庭作业问题/作业/项目。这是我研究生论文的一部分(教唆一个非常非常小的部分,但从技术上来说仍然是它的一部分)

谢谢你的帮助

编辑:这是我不久前提出的一个新算法

从一个圆的中心开始,画一条线到另外两个中心。计算将创建的角度平分的直线,并计算圆与通过圆中心的直线之间的交点。您将获得2个结果。对其他两个圆圈重复此操作,总共得到6分。迭代这6个点,得到8个可能的解决方案。找到8种解决方案中的最大值

如果您在三个点的一个“方向”上绘制直线,此算法将处理共线情况

从我尝试使用CAD软件为我计算几何图形的几个随机试验来看,这种方法似乎优于前面提到的所有其他方法。然而,Victor的一个反例已经证明它不是最佳解决方案

明天我将对此进行编码,由于某种原因,我失去了对我大学计算机的远程访问,大部分东西都在上面。

非最佳,当这三个都不共线时,效果很好:

我没有证据(因此不知道它是否保证是最大的)。也许我会做一个。但是:

我们有三个半径为R的圆,其位置(从中心开始)P0P1P2。我们希望找到三角形的顶点,使得三角形的面积最大,并且顶点位于圆边的任意点上

找到所有圆的中心并称之为C。然后C=(P0+P1+P2)/3。然后我们在每个圆上找到距离C最远的点

查找向量V0V1V2,其中Vi=Pi-C。然后找到点Q0Q1Q2,其中Qi=norm(Vi)*R+Pi。其中,norm表示向量的标准化,norm(V)=V/| V |


Q0Q1Q2是三角形的顶点。我假设这是最优的,因为这是顶点之间可能距离最远的距离。(我想。)

我的第一个想法是你应该能够找到一个解析解

那么圆的方程是:

(x1-h1)^2 + (y1-k1)^2 = r^2
(x2-h2)^2 + (y2-k2)^2 = r^2
(x3-h3)^2 + (y3-k3)^2 = r^2
三角形的顶点是(x1,y1)、(x2,y2)和(x3,y3)。三角形的边长是

A = sqrt((x1-x2)^2 + (y1-y2)^2)
B = sqrt((x1-x3)^2 + (y1-y3)^2)
C = sqrt((x2-x3)^2 + (y2-y3)^2)
所以三角形的面积是(使用)

所以面积是6个变量的函数

在这一点上,我意识到这不是一条富有成效的推理路线。这更像是我投入模拟退火系统的东西


所以我的第二个想法是选择圆心为A的圆上的点如下:构造线BC连接其他两个圆的中心,然后构造线AD,它垂直于BC并穿过A。三角形的一个顶点是AD和圆心为A的圆的交点。其他顶点也是如此。我无法证明这一点,但我认为它给出的结果与简单的“离所有圆的中心最远”方法不同,而且出于某种原因,我感觉更好。我知道,不太懂数学,但我是个程序员。

让我们假设圆心是C0、C1和C2;半径R

因为三角形的面积是.5*base*height,让我们首先找到可以用圆构造的最大基底。 基数=最大{(| C0-C1 |+2R),(| C1-C2 |+2R,(| C2-C0 |+2R}

一旦在两个圆之间确定了基准长度,我们就可以找到最远的垂直度
S = (A+B+C)/2
area = sqrt(S(S-A)(S-B)(S-C))
maximize:  area(v1,v2,v3) ~ |cross((v2-v1), (v3-v1))|
such that: v1 in C1, v2 in C2, v3 in C3   (i.e., v_i-c_i)^2 - r_i^2 <= 0)