Language agnostic 围绕另一个圆旋转一个圆

Language agnostic 围绕另一个圆旋转一个圆,language-agnostic,math,trigonometry,Language Agnostic,Math,Trigonometry,简短的问题:给定一个点p和一个线段L,如果保证存在这样一个点,我如何找到L上与p精确X距离的点(或多个点) 问这个问题的较长方法是用图像。给定两个圆,一个是静态的,一个是动态的,如果你把动态的一个朝着静态的一个直线移动,很容易确定接触点(见1,绿点) 现在,如果以一定角度将动态圆移向静态圆,则确定接触点要困难得多(参见2,紫色圆点)。那部分我已经做过了。我想做的是,在确定接触点后,减小角度并确定新的接触点(见3,4,红点) 在#4中,可以看到角度减小了不到一半,新的接触点位于直线点和原始点之间的

简短的问题:给定一个点p和一个线段L,如果保证存在这样一个点,我如何找到L上与p精确X距离的点(或多个点)

问这个问题的较长方法是用图像。给定两个圆,一个是静态的,一个是动态的,如果你把动态的一个朝着静态的一个直线移动,很容易确定接触点(见1,绿点)

现在,如果以一定角度将动态圆移向静态圆,则确定接触点要困难得多(参见2,紫色圆点)。那部分我已经做过了。我想做的是,在确定接触点后,减小角度并确定新的接触点(见3,4,红点)

在#4中,可以看到角度减小了不到一半,新的接触点位于直线点和原始点之间的一半。在#7中,可以看到角度被一分为二,但新的接触点向直线点移动的距离远远超过一半

在我的例子中,我总是想将角度减小到原始值的5/6倍,但是原始角度和圆之间的距离是可变的。这些圆的半径都相同。减小角度后我需要的实际数据是动态圆和静态圆的新中心之间的向量,即3、4、6和7中的蓝线,如果这使计算更容易的话


到目前为止,我知道我必须沿着紫色圆圈的中心线移动动态圆圈,朝着静态圆圈的中心移动。然后,圆必须直接移回动态圆的原始位置。最难的部分是准确地知道它必须向后移动多远,以便它刚好接触到另一个圆。

画一个圆心与静止圆相同的圆,半径为两个半径之和。与运动圆中心的平移线有两个交点。接触时,移动圆的中心位置是这两个交点中较近的一个。

回答你的简短问题,如果你在笛卡尔平面上,那么找到L所在直线的方程(给定L的两个端点,这很简单)。求出穿过P的垂直于所述直线的方程(通过取斜率的负倒数,插入P的x和y值,并求解截距)。然后,将两条垂直线的方程作为一个方程组(x和y相等),找到它们相交的点。然后求交点和点P之间的距离,点P是三角形的一条腿。最后,根据给定的距离和距离X,使用毕达哥拉斯定理来计算三角形另一条边的距离。现在你要找的点是L上的一点,也是L所在的直线上的一点。所以用你刚才得到的距离,你以前找到的交点,和L的直线方程,你可以找到想要的点的坐标。最多只能有2个这样的点,所以你要测试的就是找到的点的坐标是否在L上,或者在L之外,但仍然在它的线上。很抱歉回答得太长,如果你想要几何解释而不是代数解释的话。

让你的线段的端点是
a
B
,而你的静止圆的中心是
C
。让两个圆的半径都为
r
。让碰撞时移动圆的中心为
D
。我们有一个三角形,
ACD
,其中我们知道:距离
AC
,因为它是常数,角度
DAC
,因为这就是你正在改变的,距离
CD
,它正好是
2r
。理论上,两边和角度应该让你得到三角形的所有剩余部分…

这属于数学堆栈交换:我想我可以说这是我在Java中尝试做的事情,如果这有什么不同的话。