这是计算两个圆的交点的更有效的方法

本文关键字:方法 有效 两个 计算 | 更新日期: 2023-09-27 18:12:44

我试图在C#程序中找到最快、最简单的方法来计算两个圆的交点。据我所知,有两种可能的方法,你必须原谅我不知道它们的官方名称。

我们假设你知道两个圆的中心点和它们的确切半径,从中你可以计算它们之间的距离,所以只缺少交点。这是在一个标准的x-y图上进行的。

第一种是一种替代方法,就像这里描述的方法一样,你将两个圆公式组合起来,分离出xy,然后将其分解回一个原始公式,最终得到一个二次方程,该方程可以求解一个轴的两个(或可能是一个或没有(坐标,然后你可以在另一个轴上找到相应的坐标。

我看到的第二个参考是使用余弦定律方法来确定角度,然后可以为网格上的每一侧绘制一条线,并输入半径来找到实际的交点。

我已经写下了第一种方法的步骤,看起来相当冗长。第二个需要一些研究/学习才能写出,但听起来更简单。我从来没有做过将这样的过程转换为代码,所以我不知道最终哪一个对该应用程序来说最简单。有人对此有意见吗?或者我可能走错了路?有没有一个图书馆,我可以用来代替重新发明轮子?

一些上下文:我主要担心进行这些计算的CPU成本。我计划在应用程序上一次重复地执行大量操作,因此我想要最简单的方法来完成它。

这是计算两个圆的交点的更有效的方法

计算几何几乎总是很难实现。它几乎总是相当占用CPU。也就是说,如果你设置正确,这个问题就是代数。

计算两个中心之间的距离d = hypot(x2-x1, y2-y1)。如果r1 + r2 < d,则不存在交集。如果是r1+r2 == d,则交点在(x1, y1) + r1/(r1+r2) * (x2-x1,y2-y1).。如果是d < abs(r1-r2),则一个圆包含在另一个圆中,并且不存在交点。可以计算出两个圆相切,其中一个包含在另一个中的情况。我只处理剩下的案子。

您希望找到与(x2-x1,y2-y1)正交的距离h和与(x2-x1,y2-y1)平行的距离p,从而使p^2 + h^2 = r1^2(d-p)^2 + h^2 = r2^2。将这两个方程相减,得到p中的线性方程:d^2-2dp = r2^2-r1^2。求解p的线性方程。然后是CCD_ 17。

两个点的坐标为(x1,y1) + p (x2-x1,y2-y1) / d +/- h (y2-y1, x1-x2) / d。如果您完成上面的推导并求解p/dh/d,您可能会得到执行较少操作的结果。