泳池/台球三角

时间:2010-11-23 14:13:06

标签: c# java trigonometry

好吧我想尝试用c#/ java进行游戏。

  • start =游泳池提示后面(x,y)
  • end =游泳池提示前(x,y)
  • circles =球的列表(x,y,r)

因此,每次移动鼠标时,我都会更新startend,然后循环查看`圈子,检查它是否相交。那么这就是我的问题我需要弄清楚如果我在交叉点击中它会发生什么球(它会向右上方)。

我将如何做到这一点。我在谷歌上看了一些例子,但只能找到他们用矢量做到这一点的例子,那就是我的头脑....

我的第一个想法是获得池球杆的角度,并从圆圈中点画一条线相同的角度,但由于某种原因这是错误的。它可能是我的GetEnd函数

    public Point GetEnd(Point start, double angle, int len)
    {
        double y = start.Y + (len * Math.Sin(angle));
        double x = start.X + (len * Math.Cos(angle));

        return new Point((int)x, (int)y);
    }

1 个答案:

答案 0 :(得分:0)

我认为提示点和球移动的方向之间的角度是:

Math.ASin(a/r)

a表示提示的光线与球的中心之间的最小距离,以及r球的半径。

通过最小化lamda的a然后计算该表达式的平方根来获得a^2 = (Cue.Position+Cue.Direction*Lamda-Ball.Position)^2

但是我懒得在没有载体的情况下重新表达这些表达。