Вычисление тангенса из точки на окружности? - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь создать алгоритм для нахождения касательной к окружности, чтобы я мог рассчитать угол отражения для этой окружности, когда она сталкивается с объектом. Я знаю значения x и y центра круга и радиуса. У меня также есть значения x и y для точки удара с другим объектом. Любая помощь в том, как вычислить касательную, возможно, с использованием библиотеки Java, была бы полезна, или если бы у кого-нибудь были какие-либо рекомендации о том, как рассчитать угол отражения, был бы признателен. Спасибо.

1 Ответ

2 голосов
/ 08 марта 2012

Из того, что я понимаю, вы на самом деле хотите рассчитать угол падения для круга.Для этого вам нужно знать угол движения круга и угол отскакивающей поверхности;точки столкновения будет недостаточно, поскольку она одинакова независимо от угла, под которым сталкивается окружность.Если у вас есть этот угол, то новый угол круга задается как (360 - circle's angle + (surface's angle * 2)) % 360.Я сомневаюсь, что вы отслеживаете угол перемещения круга, хотя у вас, возможно, уже есть две переменные, описывающие его движение, возможно, что-то вроде: «для каждого обновления перемещайте круг на dx единицы вправо и dy единицы вверх".Если у вас есть это, вы можете вычислить угол окружности в градусах с (180 / π) * arctan(dy / dx).Эта формула работает, потому что dy / dx дает наклон линии, созданной движением круга по плоскости.Как только мы получим наклон, мы берем его тангенс (арктан), который дает угол в радианах.Наконец, мы конвертируем этот угол в градусы с помощью детали 180 / π.

Это также работает, если мы используем наклон поверхности.Скажем, поверхность - это линия, начинающаяся в точке (x1, y1) и заканчивающаяся в точке (x2, y2).Наклон поверхности определяется с помощью (y1 - y2) / (x1 - x2).Затем мы можем применить формулу, как и раньше, подставив наклон поверхности следующим образом: (180 / π) * arctan((y1 - y2) / (x1 - x2)).

Теперь у вас есть круг и поверхность в градусах, и вы можете применить первую формулу выше.

...