圆是2次曲线,平面上所有到定点距离相等的点的轨迹是圆形.
圆是圆锥曲线,用平行于圆锥底面的平面截取得到.
两个圆如果相交,会有两个交点.如果相切,会有一个交点.
交点可以通关联两个圆的方程组求解得到,但是这个方法比较费劲.可以利用相交圆的性质便捷的求出交点.
两个圆相切时有一个交点,根据相切的性质,两个圆的切线点位于两个圆心连线上,切线垂直于圆心连线
如上图: o1 , o2 是圆心, D 是切点.
那么已知条件有 o1 , o2 坐标, o1D = o1.r, o2D = o2.r , λ = o1D / Do2 = o1.r / o2.r
这就可以使用定比分点公式求出 D 的坐标.
x = (x1 + λ * x2) / (1 + λ) y = (y1 + λ * y2) / (1 + λ)
两个圆相交,会有2个交点,其连线是两个圆共有的一条弦.
根据公共弦的性质,圆心连线垂直平分公共弦.
以上图推导计算交点坐标的公式,这是个特例,圆心的连线与 X 轴平行.且原点是 o1 .
// 设 o1o2 = M , o1D = x , AD = y , o1.r = r1 , o2.r = r2 // 由于 AB 垂直 o1o2,且被 o1o2 平分.所以 AD = DB // 根据直角三角形 a^2 + b^2 = c^2 有 x^2 = r1^2 - y^2 (M - x)^2 = r2^2 - y^2 // 解出 x x = (r1^2 - r2^2 + M^2) / 2M // 带入第一个方程解出 y , y 和 -y 就是两个点的 y 坐标. // 这个公式计算出的坐标值,是以 r1 为原点,o1o2 为 X 轴正方向的坐标系的. // 注意,作为原点的 r1 需要是 r1,r2 圆心的 x 坐标值较小的那个, // 如果r1,r1圆心的 x 值相同,那么 r1 是 y 坐标值较小的那个. // 公式计算出的坐标值,要换算回原来的坐标系值,需要做一次旋转变换,和平移变换. // 旋转变换角度就是 o1o2 的斜率对应角度,如果是垂直 X 轴的,角度是 -Math.PI/2 // 平移变换就是 r1 的圆心为参考点.
得到坐标后,根据坐标系变换公式,再求出其在原坐标系的坐标.
虽然要变换坐标系,但是比起解两个圆的方程,计算要简便.
经过测试,在以下情况结果都正确