已知两圆的一个交点,求另一交点的简便方法
已知两圆的一个交点,求另一交点的简便方法
嘿,这个场景我太熟了!既然已经握了一个交点B,还有两个圆心cAB(就叫它O₁吧)、cBC(叫O₂)的位置,真的不用绕去列直线方程再联立求解,用向量来算简直是捷径!
核心思路其实就抓一个几何性质:两圆的圆心连线,是两个交点连线的垂直平分线。也就是说,你要找的点P,其实就是B关于直线O₁O₂的对称点——这也是你图里提到的结论,那怎么用向量快速算出P呢?
给你个直接能用的向量计算步骤,代入坐标就能算:
- 先把所有点用坐标向量表示(比如O₁=(x₁,y₁),O₂=(x₂,y₂),B=(x_B,y_B))
- 计算圆心连线的向量
d = O₂ - O₁,也就是(x₂-x₁, y₂-y₁) - 计算向量
u = B - O₁,也就是(x_B-x₁, y_B-y₁) - 算投影系数
t = (u · d) / |d|²(这里·是向量点积,|d|²是d的模长平方,也就是(x₂-x₁)²+(y₂-y₁)²) - 最后算出P的坐标:
P = 2*(O₁ + t*d) - B
为啥这个方法管用?其实O₁ + t*d就是点B在直线O₁O₂上的投影点M,而对称点P满足M是BP的中点,所以P=2M-B,一步到位!
举个简单例子验证下:如果O₁=(0,0),O₂=(2,0),B=(0,1),那d=(2,0),u=(0,1),t=(0*2 +1*0)/(2²+0²)=0,M=(0,0)+0*(2,0)=(0,0),P=2*(0,0)-(0,1)=(0,-1)——确实是B关于O₁O₂(x轴)的对称点,而且也是两圆的另一个交点,完美!
这种方法全程都是坐标运算,不用解复杂的方程组,代码实现起来也超简单,绝对比你想的列直线方程再联立要高效得多~
备注:内容来源于stack exchange,提问作者xenoid
相关产品推荐
相关产品推荐

