Из того, что я понимаю, вы на самом деле хотите рассчитать угол падения для круга.Для этого вам нужно знать угол движения круга и угол отскакивающей поверхности;точки столкновения будет недостаточно, поскольку она одинакова независимо от угла, под которым сталкивается окружность.Если у вас есть этот угол, то новый угол круга задается как (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))
.
Теперь у вас есть круг и поверхность в градусах, и вы можете применить первую формулу выше.