有两个圆圈: a 以点 A 为中心,圆圈 b (中心位于 B ) . 什么是计算所有或没有切圆的2D位置的等式 . 主要约束是,所有圆的半径都相同 . 据我所知,应该没有解决方案(图2)或2个解决方案(图1) . 如何找出解决方案,以及这些解决方案的中心位置( C 和 D ) .
图1:这里应该有2个解决方案
图2:没有解决方案!
Update (solution):
1)计算从A到B的距离 - > |AB| :
2)检查解决方案是否存在,仅在以下情况下存在:
3)如果存在,则计算点 A 和 B 之间的半点:
4)创建到线段的标准化垂直向量 AB :
5)计算从该H点到C点的距离 - > |HC| :
6)最后沿距离| HC |从X开始沿(HC)计算点 C :
2 回答
解决方案存在iff
d(A,B) = sqrt(2)*2*r
要找到解圆的中心,这将允许您绘制圆周,您可以将圆与中心
(x_m,y_m)
相交,即半径为sqrt(2)*r
的分段AB
的中点,该线垂直于AB并从中传递(x_m,y_m)
这应该为您提供所有必要的信息,以检查解决方案是否适用,如果是,则绘制它 .
我想这个问题应该迁移到更多数学相关的网站 .
试着想象当圆圈 a 和_2474212越来越远时,这两个相切圆圈的位置 . 他们越来越靠近 AB . 一旦 AB 段等于 4r ,这两个切线圆将重叠 . 从现在开始,一旦圆圈 a 和 b 进一步分开,就没有任何相切的圆圈 .
如果要计算这些圆的位置,只需假设中心之间的距离始终为 2r :
对于xC和yC,您应该得到两个,一个或没有解决方案,它们将是切线圆的中心 . 我希望我没有弄乱一些东西 .
解决方案
如果您知道有解决方案(只需检查
d(A,B) <= 4r
),这些是您的两个圆圈的坐标:http://pastebin.com/LeW7Ws98
有点吓人,嗯?但它正在发挥作用 . 有以下变量:
x_A, y_A
- 圆圈A的坐标,x_B, y_B
- 圆圈B的坐标,r
- 半径 .我已经使用下面的一条评论中的值检查了解决方案 . 我认为您可以复制这些解决方案并立即将它们注入到您的代码中(假设有一个sqrt函数)并在声明一些变量后得到结果 .
这些解决方案很容易源于Save的命题,但我无法在他的答案下面发表评论 - 我的声望点不到50,呃......(谢谢!你是男人!) . 但是我很确定它们应该对我的系统有效 . 干杯