2013-04-26 7 views
1

Я пытаюсь реализовать rotation matrix. Но есть очень странный эффект: How it look likeЧто происходит с Math.sin и Math.cos в Java? И как это исправить?

Это мой код:

public void rotation(PointF point, double a) { 

    point.x = (point.x - 400) * Math.cos(a) - (point.y - 300) * Math.sin(a) 
      + 400; 
    point.y = (point.x - 400) * Math.sin(a) + (point.y - 300) * Math.cos(a) 
      + 300; 
} 

В итоге имеем падение точки в координатах 400,300.

Что не так? Мне нужно двигаться по кругу? Как я могу сделать лучше?

+0

Что произойдет, если вы измените '400' на' 400f' и '300' на' 300f' – durron597

+0

Ничего. По-прежнему «падает». Мой point.x - двойной. – AMSmirnov

ответ

6

Ну не должна быть как

double x = point.x * Math.cos(a) - point.y * Math.sin(a); 
double y = point.x * Math.sin(a) + point.y * Math.cos(a); 
point.x = x; 
point.y = y; 

для предотвращения изменения point.x слишком рано?

+0

О, конечно. Это правильный ответ. – durron597

+0

Это работает. Спасибо! – AMSmirnov