圆和三角形的问题

时间:2010-04-06 23:07:21

标签: math geometry theory

我有一个有趣的问题,我一直试图解决最后一段时间:

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

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

我一直在看这个问题好几个小时并问了一堆人,但到目前为止只有一个人能够提出一个合理的解决方案(虽然我无法证明这一点)。

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

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

我想知道是否有人遇到类似这样的问题,如果有的话,你是怎么解决的?

注意:我知道这主要是一个数学问题而不是编程,但是它将在代码中实现,并且必须进行优化才能非常快速有效地运行。事实上,我已经在代码中进行了上述解决方案并进行了测试工作,如果您想看看,请让我知道,我选择不发布它因为它全部采用矢量形式而且几乎无法弄清楚到底是怎么回事(因为它被浓缩得更有效率)。

最后,是的,这是为了学校的工作,虽然它不是一个家庭作业问题/任务/项目。这是我毕业论文的一部分(非常非常小,但技术上仍然是其中的一部分)。

感谢您的帮助。

编辑:这是我刚才提出的一种新算法。

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

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

从我尝试使用CAD软件为我计算几何形状的少数随机试验中,这种方法似乎优于之前所述的所有其他方法但是,已经证明它不是维克多计数器之一的最佳解决方案实例

我明天会对此进行编码,出于某种原因,我已经失去了对大学计算机的远程访问权限,并且大部分内容都在其上。

10 个答案:

答案 0 :(得分:7)

我创建了一个HTML5 canvas app,可能对人们有用。它非常基本(并且代码不漂亮),但它可以让你移动三个相等半径的圆,然后使用渐变/最陡下降来计算最大三角形。您还可以保存图表的位图。该图还显示了顶点为圆心的三角形,以及其中一个高度。 Edit1 :“高度”实际上只是通过其中一个圆心并垂直于连接中心的三角形的相对边缘的线段。它就在那里,因为一些建议的构造使用它。 Edit2 :最陡的下降方法有时会陷入局部最大值。您可以通过移动圆圈直到黑色三角形翻转然后将圆圈移回其原始位置来超出该最大值。研究如何找到全局最大值。

这在IE中不起作用,因为它不支持画布,但大多数其他“现代”浏览器应该可以工作。

我之所以这样做是因为我发现这个页面上的一些论点有问题,部分原因是因为我从来没有编制过最陡的下降,并想看看它是如何工作的。无论如何,我希望这会有所帮助,我希望稍后再说一些评论。

修改:我已经多看几何,并在separate answer中写了我的发现。

答案 1 :(得分:7)

我冒昧地提交了第二个答案,因为我的原始答案提到了一个人们可以玩的在线应用程序以获得洞察力。这里的答案更像是一个几何论点。

下面的图表阐述了我希望发生的事情。其中大部分都是受到@Federico Ramponi观察到的影响,即最大的三角形的特点是每个顶点的切线与相对侧平行。

alt text

图片是使用优秀桌面计划Geometry Expressions的试用版制作的。该图显示了以AEC为中心的三个圆圈。它们具有相等的半径,但图像并不真正取决于半径相等,因此解决方案推广到不同半径的圆。 MNNOOM行与圆相切,并触及点IH和{{1}处的圆圈} 分别。后面的点形成内三角G,它是我们想要最大化的三角形。

还有一个外部三角形IHG,它是 homethetic 到内部三角形,意味着它的边与MNO的边平行。

@Federico观察到IHG具有最大面积,因为沿着相应的圆移动其任何顶点将产生具有相同基部但较少高度的三角形,因此面积较小。换句话说,如果三角形是由角度IHGt1t2在三个圆上参数化(正如@Charles Stewart指出的那样,并且用于我最陡的下降画布应用程序),那么t3区域的梯度为(t1,t2,t3),区域是极值的(图中最大)。

那么这个图是如何计算的?我事先承认我并不完整,但这是一个开始。给定三个圆圈,选择一个点(0,0,0)。绘制以ME为中心的圆的切线,并将切点指定为CG。在以I为中心的圆与OHN平行的圆上绘制正切A。这些都是代数和几何上相当直接的操作。

但我们还没有完成。到目前为止,我们只有GIOHN平行的条件。我们无法保证GIMGO平行或IHMIN平行。所以我们必须回过头来改进GH。在交互式几何程序中,设置它然后移动M直到满足后面的并行条件(通过眼球,无论如何)都没有什么大不了的。 几何表达式创建了图表,但我使用了一些作弊来实现它,因为它的约束求解器显然不够强大,无法完成这项工作。 MGI的代数表达式相当简单,因此根据H的事实应该可以求解M平行四边形,无论是明确的还是数字的。

我应该指出,一般来说,如果你从MIHG开始遵循构造,那么每个圆圈有两个切线选择,因此有八种可能的解决方案。正如在问题的其他尝试答案中一样,除非你有一个好的启发式方法来帮助你提前选择要计算的切线,你应该计算所有八个可能的三角形并找到具有最大面积的三角形。在最小面积或鞍点的意义上,其他七个将是极端的。

就是这样。这个答案并不完全,因为它使M的最终计算有点开放。但是它被缩减为2D搜索空间或者是一个ornery的解决方案,而不是一个很大的方程式。

最后,我不同意@ Federico的结论,即这证实了OP提出的解决方案是最优的。确实,如果你从圆心到中心三角形的相对边缘绘制垂线,那些垂线与圆相交给你三角形顶点。例如。 M位于H垂直于A)的直线上,但这与原始提议的解决方案(通过GI和垂直于A - 一般ECEC不平行。

答案 2 :(得分:3)

设A,B,C为三角形的顶点,并假设它们与解决方案一样。 请注意,构造的关键属性是每个顶点位于其圆的切线上,该圆与三角形的相对侧平行。显然,圆本身完全位于切线的一侧,在最优解中,每个切线都将圆与其他顶点放在同一侧。

将AB视为三角形的“基础”,让C在其圆中浮动。如果您将C移动到圆圈内的另一个位置C',您将获得另一个具有相同基部但高度较小的三角形ABC',因此面积也较小:

figure 1 http://control.ee.ethz.ch/~ramponif/stuff/circles1.png

出于同样的原因,您可以很容易地看到不遵循您的构造的顶点的任何位置都不是最佳的。例如,假设顶点A',B',C'中的每一个都不位于与连接另外两个顶点平行的切线上。

然后,构造包含(比如说)C'的圆的切线,该圆与A'B'平行并且将圆留在与A'B'相同的一侧,并将C'移动到相切点C,总是可以构造一个三角形A'B'C,它具有相同的底座,但是更高的高度,因此也有更大的面积:

figure 2 http://control.ee.ethz.ch/~ramponif/stuff/circles2.png

由于任何不符合您构造的三角形都不是最佳的,我相信您的构造是最佳的。在圆圈的中心对齐的情况下,我有点困惑,但我想有可能沿着相同的线条证明最优性。

答案 3 :(得分:2)

我认为这是一个凸优化问题(不是没有,见下文),因此可以使用众所周知的方法有效地解决。

你基本上想要解决问题:

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)

每个约束都是凸的,面积函数也是凸的。现在,我不知道是否有更高效的公式,但你至少可以使用带有导数的内点法,因为区域相对于每个顶点位置的导数可以通过分析得出(我记下来了)某处...)。

编辑: grad(区域(v1,v2,v3))(v_i)= rot90(vec(vj,vk)),其中vec(a,b)使2D矢量开始在a和a结束时,rot90表示正向旋转90度,假设(vi,vj,vk)是正向的。

编辑2:问题不凸出,考虑到共线情况应该是显而易见的;两个退化解是一个非凸性的可靠标志。但是,从圆心开始的配置应该是全局最优的局部最大值。

答案 4 :(得分:0)

不是最佳的,当所有三个都不是共线时效果很好:

我没有证据(因此不知道它是否保证最大)。也许我会在一个人身上工作。但是:

我们有三个半径 R 的圆圈,位置(从中心) P0 P1 P2 。我们希望找到三角形的顶点,使得三角形的面积最大,顶点位于圆边的任意点上。

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

找到 V0 V1 V2 的向量,其中 V i = P - C 。然后找到点 Q0 Q1 Q2 ,其中 Q i = norm(V i )* R + P i norm 表示向量的归一化, norm(V)= V / | V |

Q0 Q1 Q2 是三角形的顶点。我认为这是最佳的,因为这是顶点彼此之间最远的。 (我想。)

答案 5 :(得分:0)

我的第一个想法是你应该能够找到一个分析解决方案。

然后圆的方程是:

(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)

所以三角形的面积是(使用Heron's formula

S = (A+B+C)/2
area = sqrt(S(S-A)(S-B)(S-C))

因此,面积是6个变量的函数。

此时我意识到这不是一个富有成效的推理路线。这更像是我放入模拟退火系统的东西。

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

答案 6 :(得分:0)

假设圆的中心为C0,C1和C2;和半径R.

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

一旦确定了两个圆之间的基本长度,我们就可以找到从基线到第三个圆的最远垂直点。 (他们的斜坡的产品是-1)

对于特殊情况,例如在一行中对齐的圆圈,我们需要在确定基线时执行其他检查。

答案 7 :(得分:0)

看起来找到三个圆圈的最大Apollonius circle,然后在该圆圈中刻上等边三角形将是一个解决方案。证明作为练习留下;)。

修改

此方法也存在与其他解决方案一样的共线圈问题,但也不起作用。

答案 8 :(得分:0)

一些初步想法。

  1. 定义调用广受欢迎的三角形最大三角形。请注意,这可能不是唯一的:如果圆圈都具有相同的中心,那么通过围绕中心旋转获得的无限多个最大三角形,如果中心是共线的,那么将有两个最大三角形,每个都是镜像另一个。
  2. 定义调用三角形(可能是退化的,无论是点还是直线),其顶点是内部三角形的圆心。
  3. 观察解决方案可以表示为三个角度,表示每个圆圈的圆周上找到三角形。
  4. 观察给定两个外部顶点,我们可以确定给出最大区域的第三个顶点:绘制两个外部顶点和另一个圆心之间的三角形的高度。这条线在两个地方与圆周相交;更远的地方是第三个顶点的最大化选择。 (修正了错误的算法,Federico's argument可以调整以显示此观察的正确性
  5. 后果问题从三个角度的问题减少到一个两个角色。
  6. 猜想 想象一下,该图是一个插板,在圆圈的三个中心有三个引脚。想象一下,一个长度等于内部三角形的周长的字符串的闭环,再加上一个圆的半径,我们将这个环放在引脚周围。拿一支假想的笔,想象一下画圈,总是紧的。我猜想最大三角形的点都将位于这个循环图上,并且在内部三角形不退化的情况下,最大三角形的顶点将是循环图与圆之一相交的三个点。周长。 许多反例
  7. 当我可以腾出时间思考它时,可以效仿。

答案 9 :(得分:0)

这只是一个想法,没有证据或数学与建筑一起进行。如果每个圆的半径相同,则要求圆心不是共线的。如果半径不同,则可以放宽此限制。

结构:

(1)构造一个三角形,使得三角形的每一边都与两个圆相切,因此,每个圆在三角形的两边都有一个切点。

(2)在每个圆上的这两个切点之间绘制弦

(3)从圆的中心开始,通过和弦的中点找到延伸射线上圆的边界上的点。三个圈子中应该有一个这样的点。

(4)将它们的三个点(3)连接到三角形。

那时我不知道它是否是最大的这样的三角形,但是如果你正在寻找近似的东西,那么可能就是这样。

稍后:您可以通过在垂直于连接三个圆的线的方向上略微扰动“中间”圆来找到退化情况的近似答案。