我正在寻找一种算法来检测一个圆是否与同一平面上的任何其他圆相交(假设一个平面上可以有多个圆)。
我发现的一种方法是进行分离轴测试。它说:
Two objects don't intersect if you can find a line that separates the two objects, i.e. a line such that all objects or points of an object are on different sides of the line.
但是,我不知道如何将这种方法应用于我的案例。
有谁能够帮助我?
最佳答案
两个圆相交当且仅当它们的圆心之间的距离在它们的半径之和与差之间。给定两个圆 (x0, y0, R0)
和 (x1, y1, R1)
,公式如下:
ABS(R0 - R1) <= SQRT((x0 - x1)^2 + (y0 - y1)^2) <= (R0 + R1)
两边都平方让你避免慢
SQRT
,如果您的输入是整数,则继续使用整数:(R0 - R1)^2 <= (x0 - x1)^2 + (y0 - y1)^2 <= (R0 + R1)^2
由于您只需要是/否测试,因此此检查比计算确切的交点要快。
上述解决方案甚至适用于“一个圈内另一个”的情况。
关于math - 如何检测同一平面上的圆和任何其他圆之间的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367512/