Я пытаюсь понять, как я могу вычислить координаты по кругу. Для простоты я сделал несколько изображений.
Это начало с информацией, которую я имею. Теперь мне нужно вычислить новые координаты, когда, например, круг повернется на 90 градусов вправо. Как и в следующем изображении:
Мне нужно вычислить координаты новой красной точки. (Мне также нужно это с разной степенью, например, 20 градусов).
Для этого мой план состоял в следующем:
- Рассчитать расстояние между двумя точками
- Рассчитайте степень между севером (вверх) и заданной точкой
- Вычислите новое местоположение со степенью (с шага назад) + степеней, которые нужно повернуть (в изображениях на 90 градусов).
Мой первый шаг:
distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
Часть для вычисления новых градусов:
double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
И последней частью для расчета нового местоположения будет:
double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
Однако, когда я делаю эти вычисления с помощью, например, 0 градусов, он все равно возвращает другое значение, чем исходные координаты.
Любая помощь будет оценена!
Изменить для Филиппа Джаходы:
Мои значения:
distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
и мои результаты:
center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
Как вы можете видеть, степень равна 0, поэтому точка не должна поворачиваться. Он должен сохранять координаты 490, 728, но не сохраняет их.