本方法的步骤是:
1.判断两个圆是否相交
2.已知两圆的交点连线L1与两圆心连线L2是垂直关系,所以可以得到两圆的交点连线(L1)的斜率
3.通过几何关系求出L1和L2的交点,从而得出L1方程
4.求直线与圆的交点
程序中涉及到的其他静态类方法可以在我的其他博文中找到
public static bool InterC2C(double centerX1, double centerY1, double R1, double centerX2, double centerY2, double R2, out List<double> Rows, out List<double> Columns)
{
Rows = new List<double>();
Columns = new List<double>();
double dis = DistanceP2P(centerX1, centerY1, centerX2, centerY2);
bool flag = true;
List<double> row = new List<double>();
List<double> col = new List<double>();
row.Add(centerX1);
row.Add(centerX2);
col.Add(centerY1);
col.Add(centerY2);
if (dis > R1 + R2)
{
flag = false;
}
else if (Math.Abs(dis - R1 - R2) < 0.001)
{
InterC2S(centerX1, centerY1, R1, row, col, out List<double> resR1, out List<double> resC1);
InterC2S(centerX2, centerY2, R2, row, col, out List<double> resR2, out List<double> resC2);
}
else
{
double L = dis;
double ae = (R1 * R1 - R2 * R2 + L * L) / (2 * L);
double centerR = centerX1 + ae * (centerX2 - centerX1) / L;
double centerC = centerY1 + ae * (centerY2 - centerY1) / L;
GenLineEqu2(centerX1, centerY1, centerX2, centerY2, out double a, out double b, out double c);
double c2 = a * centerC - b * centerR;
InterC2L(centerX1, centerY1, R1, b, -a, c2, out Rows, out Columns);
}
return flag;
}