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