Решил изучить библиотеку sfml для c++, как первое графическое приложение захотел сделать визуализацию магнитного зеркала. То есть частица влетает в магнитное поле таким образом, что вектор её скорости перпендикулярен вектору магнитной индукции, из-за чего внутри поля она движется по окружности, вылетев из поля под таким же углом, под котором влетела.
Может быть две ситуации: когда частица движется по части окружности, центр которой находится вне поля (для этого варианта у меня всё получилось), когда частица движется по части окружности, центр которой находится внутри поля. Ситуации эти определяются знаком заряда, но не в этом суть.
По идее нужно просто перемещать частицу по окружности, при этом учитывая расположение центра. Также нужно учитывать, что позиция частицы высчитывается от верхнего левого угла окна приложения, из-за чего иногда приходится менять знаки. Вот алгоритм действий для ситуации, когда центр окружности внутри поля (другой вариант у меня вроде как получился):
1. Двигаем частицу до границы, при этом известно расположение границы, модуль скорости и угол наклона вектора скорости по отношению к границе. При этом скорость по осям:

и

.
2. На границе (на самом деле в области около границы, расстояние от верхнего края области до нижнего равно диаметру частицы) высчитываем начальные условия. При этом представим, что центр координат находится на

составляющей центра окружности и на

составляющей границы поля. Расстояние до центра окружности по

равно

(Значение положительно из-за того, что считаем от левого верхнего угла). Расстояние до частицы по

равно

.
3.Внутри поля разбиваем всё на три этапа (движение по часовой стрелке): небольшой спуск вниз по верхней части окружности, пока не дойдём до

, далее движение по всей нижней части окружности от

до

, а потом движение по небольшой части верхней части окружности от

и пока не выйдем из поля.
Распишу только первую часть, так как уже с ней проблемы, если найду ошибку в ней, всё остальное пойдёт легче.
1)Сдвигаем

на небольшой промежуток вправо, получаем, приращение

на этом промежутке (приращение по

, как я уже сказал, произвольное).
2)Возвращаем

обратно.
3)С помощью приращений находим смещение по

с учётом того, что скорость постоянная:

.
3)Смещаем

на найденное смещение.
4)Находим смещение по

:

, где

– значение

на предыдущем

. Насчёт знака при

я не уверен, ну вроде как всё верно: по идее этот знак и знак при корне должны быть разными (у корня отрицательный, у

положительный), если бы мы были в обычной декартовой системе координат, но у нас отсчёт слева сверху, следовательно они оба меняются. При этом смещение тут почему-то получается отрицательным, хотя на этом участке должно быть положительным. (просто поставить минус пробовал, не работает)
5)смещаем по

на найденное смещение.
Проблема, как мне кажется, со знаками. Но как бы я не пытался – результат далёк от верного.