-1

有两个圆:以点A中心的 a和圆b(以B为中心)。计算所有或没有切圆的二维位置的方程是什么。主要约束是,所有圆的半径都相同。据我所知,应该要么没有解决方案(图 2),要么有 2 个解决方案(图 1)。如何找出是否有解决方案,以及这些解决方案的中心位置CD)。

在此处输入图像描述 图 1:这里应该有 2 个解决方案


在此处输入图像描述 图 2:没有解决方案!

更新(解决方案):

1) 计算 A 到 B 的距离 -> |AB|

在此处输入图像描述

2) 检查解决方案是否存在,仅在以下情况下存在:

在此处输入图像描述

3)如果存在,计算点AB之间的半点:

在此处输入图像描述

4) 创建线段AB的归一化垂直向量:

在此处输入图像描述

5) 计算这个 H 点到 C 点的距离 -> |HC|

在此处输入图像描述

6) 最后在距离 |HC| 处从 X 开始沿 (HC)计算点C :

在此处输入图像描述

4

2 回答 2

2

我想这个问题应该迁移到一个更与数学相关的网站。

试着想象当圆ab越来越远时,这两个相切圆会去哪里。他们越来越接近AB线。一旦AB线段等于4r ,这两个切圆就会重叠。从现在开始,一旦圆ab分开得更远,就没有任何相切圆了。

如果要计算这些圆的位置,只需假设中心之间的距离始终为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,呃……(谢谢!你就是那个人!)。但是,我很确定它们无论如何都应该对我的系统有效。干杯

于 2013-09-01T12:56:29.067 回答
1
  1. 一个解决方案存在当且d(A,B) = sqrt(2)*2*r
  2. 要找到解决方案圆的中心,这将让您绘制圆周,您可以将圆与中心相交,即半径 (x_m,y_m)为 的线段的中点,直线垂直于 AB 并从ABsqrt(2)*r(x_m,y_m)

这应该为您提供所有需要的信息来检查解决方案是否存在,如果存在,则绘制它。

于 2013-09-01T13:04:48.423 回答