Geometry 如何消除两个圆的碰撞?

Geometry 如何消除两个圆的碰撞?,geometry,Geometry,我有两个半径相同的圆,它们彼此相交,我需要将其中一个移动到一些X和Y值,以便它们只在一个点相交(这样它们就不再相互重叠)。 如何计算需要移动其中一个圆的X和Y?浮点r/=半径 浮动A[2]/=第一个圆中心A的坐标 浮点B[2]/=第二个圆中心B的坐标 浮动AB[2]; 浮动长度_AB; 浮动B_新[2]; AB[0]=B[0]-A[0]; AB[1]=B[1]-A[1]; 长度=数学sqrt(AB[0]*AB[0]+AB[1]*AB[1]); AB[0]=2*r*AB[0]/length\u A

我有两个半径相同的圆,它们彼此相交,我需要将其中一个移动到一些X和Y值,以便它们只在一个点相交(这样它们就不再相互重叠)。 如何计算需要移动其中一个圆的X和Y?

浮点r/=半径
浮动A[2]/=第一个圆中心A的坐标
浮点B[2]/=第二个圆中心B的坐标
浮动AB[2];
浮动长度_AB;
浮动B_新[2];
AB[0]=B[0]-A[0];
AB[1]=B[1]-A[1];
长度=数学sqrt(AB[0]*AB[0]+AB[1]*AB[1]);
AB[0]=2*r*AB[0]/length\u AB;
AB[1]=2*r*AB[1]/长度;
B_new[0]=A[0]+AB[0];
B_new[1]=A[1]+AB[1];

当检测到重叠时,一种方法是将每个圆移离另一个圆:

当两个圆心之间的距离小于两个半径之和时,将每个圆彼此移动一点

编辑:示例类点(python)用于方便的算术:

class point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __sub__(self, other) -> Vector:
         return Vector(self.x - other.x, self.y - other.y)
    ...

假设圆A位于坐标(x,y)处,因为它们具有相同的半径,您必须确保((xa-xb)^2+(ya-yb)^2)^(1/2)=2NO,如代码注释标题中所示,中心点是点对象:您必须创建表示
点的对象,您可以减去该对象以获得
向量,添加到
向量
以获得新的
,并对点和向量执行常规算术。
class point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __sub__(self, other) -> Vector:
         return Vector(self.x - other.x, self.y - other.y)
    ...