2014-01-02 2 views
5

У меня есть спрайт, я знаю положение и прямоугольник позади. Я хочу получить местоположение за спрайтом, я знаю смещение.получить точку после поворота прямоугольника

Моя точка будет как

Point p=new Point(sprite.getX()-offset,sprite.getY()-sprite.getHeight()/2); 

Если я поворачиваю мой спрайт вокруг своего центра происхождения, я хочу, чтобы получить новое местоположение этой точки.

Образ, который будет лучше объяснить:

enter image description here

ответ

3

Вам необходимо предоставить координаты центра вращения (точка, которая остается неподвижной).

X' = (X - Xc) * cos(A) - (Y - Yc) * sin(A) + Xc 
Y' = (Y - Yc) * cos(A) + (X - Xc) * sin(A) + Yc 

И также было бы хорошо, чтобы сказать нам, что не работает, так как вы не дают подсказку ...

+0

Спасибо! Задача решена. –

+0

(я использую это, но не получают надлежащего) двойной Sx = ((line.getStartX() - circle.getCenterX()) * Math \t \t \t \t .cos (вращение)) \t \t \t \t - ((строка .getStartY() - circle.getCenterY()) * Математика \t \t \t \t \t \t .sin (вращение)) + circle.getCenterX(); –

+0

@Jay: Этот комментарий также относится к вам: «И было бы неплохо сообщить нам, что не работает, поскольку вы не даете подсказки ...» –

1

Смотрите источник Sprite на Libgdx на getVertices(), есть расчет, но в местных, которые могли бы помочь.

Это как очень полезно

http://www.philvaz.com/games/rotate.htm

xnew = x * cos(angle) - y * sin(angle) 
ynew = y * cos(angle) + x * sin(angle) 
+0

не работает, тот же вопрос, как и выше. –

0

Посмотрите документацию по AffineTransform класса, а также любое количество источников на Wolfram MathWorld или Википедии (например http://mathworld.wolfram.com/RotationFormula.html). В Java ваш спрайт, вероятно, будет отображаться во вращающемся фрейме с использованием класса AffineTransform, поэтому, если вы примените свои преобразования тщательно, вам, возможно, даже не придется делать какую-либо дополнительную математику самостоятельно, чтобы получить положение конечной точки.

Смежные вопросы