我正在尝试创建一个算法来查找圆上的切线,以便我可以计算该圆与物体碰撞时的反射角。我知道圆心和半径的x和y值。我还有与另一个对象的影响点的x和y值。任何有关如何使用Java库计算切线的帮助都会很棒,或者如果有人对如何计算反射角有任何建议,那么另一种方法将会受到重视。感谢。
答案 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))
。
现在你有圆度和曲面的度数,可以应用上面的第一个公式。