代码之家  ›  专栏  ›  技术社区  ›  Ed Marty

绕着另一个圆旋转一个圆

  •  0
  • Ed Marty  · 技术社区  · 14 年前

    简短的问题:给定一个点P和一个线段L,如果保证存在这样一个点,我如何找到L上与P正好相距X的点?

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

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

    Example

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

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   user400348    14 年前

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

        2
  •  1
  •   Svante    14 年前

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

        3
  •  0
  •   Radomir Dopieralski    14 年前

    让你的部分结束 A B ,静止圆的中心是 C r . 让运动圆在碰撞时刻的中心 D ACD AC ,因为它是常数,角度 DAC ,因为这就是你正在改变的,还有距离 CD 2r . 理论上,两个边和角度应该让你得到一个三角形的其余部分。。。