假设有3个圆圈,A,以点a为中心,B以点b为中心,C为中心点c。每个都具有独立于其他的已知半径,Ar,Br和Cr。 a和b的位置是已知的,但c的位置不是。
a和b之间的距离始终在(Ar + Br)和(Ar + Br +(2 * Cr))之间。
我正在寻找伪代码算法来找到c的位置,使得圆A和C是切线,圆B和C是切线。除非a和b处于最大允许距离,否则应该有两种解决方案,在这种情况下只有一种。
谢谢,非常感谢任何帮助。
答案 0 :(得分:0)
"充气"在将C缩小到单个点的同时,Rc圈出A和B.然后C的中心显示为两个膨胀圆的交点。
写出两个圆的隐式方程并从另一个中减去一个;二次项取消,留下一条直线的方程(通过两个交点的直线)。
(X-Xa)² + (Y-Ya)² = (Ra+Rc)²
(X-Xb)² + (Y-Yb)² = (Rb+Rc)²
=> by subtraction
(Xa-Xb)(2X-Xa-Xb) + (Ya-Yb)(2Y-Ya-Yb) = (Ra-Rb)(Ra+Rb+2Rc)
要解决此问题,您可以使用线性关系将Y
表示为X
的函数,然后将Y
替换为其中一个圆的等式并求解二次方程在X
中,产生两种解决方案。