在Python中找到与另外两个圆相切的圆的近似坐标的最快方法是什么?

问题描述 投票:0回答:1

我正在尝试编写一段代码,将不同半径的圆有效地打包成方形薄片。使用我正在使用的算法,我需要找到以下值之间的切线:

  • 已知半径 r 和未知坐标 (a, b) 的圆(在 x-y 平面上)
  • 另外 2 个圆 ri (i = 1, 2),半径已知为 r1 和 r2,坐标分别为 (c1.x, c1.y) 和 (c2.x, c2.y)

使用的方程(圆心之间的距离(ri 和 r)= ri + r):

((c1.x-a)**2 + (c1.y-b)**2)**(0.5) = r1 + r
((c2.x-a)**2 + (c2.y-b)**2)**(0.5) = r2 + r

我需要能够快速求解这个方程组,因为每个程序需要计算大约 250 次。

目前我正在使用 SymPy 库中的solve()函数,因为方程组具有所有非线性元素。目前,执行每个solve()函数调用大约需要10秒(太长了:()。

这是我在程序中运行solve()函数的方法:

 solve([((c1.x-a)**2 + (c1.y-b)**2)**(0.5) - c1.r - circle.r, ((c2.x-a)**2 + (c2.y-b)**2)**(0.5) - c2.r - circle.r], a,b)
*注意 a 和 b 仅设置为实数 (real=True)

我一直在互联网上浏览,试图找到一些圆的线性化方法或某种多项式逼近来加速求解过程,但什么也没找到,也一无所获。

有没有更快、更准确的方法来用 Python 求解两个圆方程组?

python sympy nonlinear-optimization circle-pack nonlinear-equation
1个回答
0
投票

ChatGPT 答案:

求解涉及圆的非线性方程组可以是 计算成本高昂,尤其是在使用符号方法时,例如 症状。加速该过程的一种方法是使用数值 方法。 SciPy 库中的 fsolve 函数是一个不错的选择 用于数值求解非线性方程组。

© www.soinside.com 2019 - 2024. All rights reserved.