直线和圆相交的坐标公式推导

Posted by Leask on August 21, 2010

今天需要实现一个求直线和圆相交坐标的算法,其实公式不难推,但是推了好几回,由于粗心,总是算错,于是耐心算了一下,把过程写写,碰巧有用的就要了去吧。

1: Ax + By + C = 0
2: (x - d)^2 + (y - e)^2 = r^2

1: -By = Ax + C
2: (x - d)^2 + (y - e)^2 - r^2 = 0

1: y = (Ax + C) / (-B)
2: x^2 - 2dx + d^2 + y^2 - 2ey + e^2 - r^2 = 0

put 1 into 2 => 3 : x^2 - 2dx + d^2 + [(Ax + C) / (-B)]^2 - 2e[(Ax + C) / (-B)] + e^2 - r^2 = 0

3: x^2 - 2dx + d^2 + [(Ax + C)^2 / B^2] + 2e[(Ax + C) / B] + e^2 - r^2 = 0

3: x^2 - 2dx + d^2 + {[(Ax)^2 + 2ACx + c^2] / B^2} + [(2eAx + 2eC) / B] + e^2 - r^2 = 0

3 * B^2 => 4: B^2 * x^2 - 2dx * B^2 + d^2 * B^2 + A^2 * x^2  + 2ACx + c^2 + 2eABx + 2eBC + e^2 * B^2 - r^2 * B^2 = 0

4: (B^2 + A^2)x^2 + (2eAB + 2AC - 2dB^2)x  + d^2B^2 + c^2 + 2eBC + e^2B^2 - r^2 * B^2 = 0

 

Fx^2 + Gx + H = 0
{
    F = B^2 + A^2
    G = 2eAB + 2AC - 2dB^2
    H = d^2B^2 + c^2 + 2eBC + e^2B^2 - r^2B^2
}

 

用F、G、H构成一元二次方程,解得x,用x解得y就可以了。还需要注意的是实数根和虚根的问题哦。