Пул / Бильярд Триг - PullRequest
       6

Пул / Бильярд Триг

1 голос
/ 23 ноября 2010

хорошо, я пытаюсь запустить игру в пул на c # / java.

  • start = задняя часть кия пула (x, y)
  • end = передняя часть кия бассейна (x, y)
  • circles = список шаров (x, y, r)

Так что каждый раз, когда вы двигаете мышью, я обновляю start, end, а затем перебираю `круги, проверяя, пересекается ли она. Тогда это моя проблема, мне нужно выяснить, что произойдет с мячом, если я ударю по нему в точке пересечения (будет ли он подниматься вниз).

Как я это сделаю. Я посмотрел на некоторые примеры в Google, но смог найти только пример, где они сделали это с вектором и так над моей головой ....

Моей первой мыслью было получить угол кия бассейна и из средней точки круга нарисовать линию под тем же углом, но по какой-то причине это неправильно. Это может быть моя 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 голосов
/ 23 ноября 2010

Я думаю, что угол между направлением, в котором указывается метка, и мяч движется:

Math.ASin(a/r)

с a минимальным расстоянием между лучом, представляющим кий и центр шара, и r радиусом шара.

Вы получаете a, минимизируя a^2 = (Cue.Position+Cue.Direction*Lamda-Ball.Position)^2 для лямды и затем вычисляя квадратный корень этого выражения.

Но мне лень переформулировать эти выражения без векторов.

...