从圆上的点计算切线?

时间:2012-03-07 21:27:51

标签: java 2d collision-detection trigonometry geometry

我正在尝试创建一个算法来查找圆上的切线,以便我可以计算该圆与物体碰撞时的反射角。我知道圆心和半径的x和y值。我还有与另一个对象的影响点的x和y值。任何有关如何使用Java库计算切线的帮助都会很棒,或者如果有人对如何计算反射角有任何建议,那么另一种方法将会受到重视。感谢。

1 个答案:

答案 0 :(得分:2)

据我了解,您实际上想要计算圆的入射角。为此,您需要知道圆的运动角度和它反弹的表面角度;碰撞点是不够的,因为无论圆碰撞的角度是什么,它都是相同的。如果你有这个角度,那么圆圈的新角度由(360 - circle's angle + (surface's angle * 2)) % 360给出。我怀疑你是否记录了圆的运动角度,尽管你可能已经有两个变量来描述它的运动,也许还有以下几点:“对于每次更新,移动圆dx单位右和dy单位“。如果你有这个,你可以用(180 / π) * arctan(dy / dx)来计算圆的角度。此公式有效,因为dy / dx给出了圆在平面上移动所创建的线的斜率。一旦我们得到了斜率,我们就得到它的反正切(arctan),它以弧度给出它的角度。最后,我们将该角度转换为180 / π部分的角度。

如果我们使用表面的斜率,这也有效。假设曲面是从点(x1, y1)开始到结束点(x2, y2)的线。表面的斜率与(y1 - y2) / (x1 - x2)一致。然后我们可以像以前一样应用公式,代替表面的斜率,如下所示:(180 / π) * arctan((y1 - y2) / (x1 - x2))

现在你有圆度和曲面的度数,可以应用上面的第一个公式。