尝试围绕一个点旋转,但无论

时间:2015-08-01 23:09:22

标签: java android trigonometry

我试图让一些物体(由点表示)围绕一个固定点旋转,但是当它们旋转时,它们越来越接近旋转点。这是旋转三角形早期的截图:

enter image description here

这是拍摄片刻之后的拍摄

enter image description here

正如您所知,距离中心的距离以及彼此的距离都会缩短。这是我用来围绕另一个点旋转点的代码:

public void rotateAboutPoint(double x, double y, double angleRad){
    for(int i = 0; i<rep.size(); i++){
        rep.get(i).x = (Math.cos(angleRad) * (rep.get(i).x - x) - Math.sin(angleRad)*(rep.get(i).y - y) + x);
        rep.get(i).y = (Math.sin(angleRad) * (rep.get(i).x - x) + Math.cos(angleRad)*(rep.get(i).y - y) + y);
    }}

我使用了与here相同的算法。除了物体缩小外,一切都很好。我尝试过使用更精确的类型,但这并没有帮助。我已经尝试用Math.Round()包装表达式,看看是否有必要通过四舍五入来帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第二个公式所需的rep.get(i).x值应该是原始值,而不是新值。只需使用临时变量。我认为这应该有用。

public void rotateAboutPoint(double x, double y, double angleRad){
    for(int i = 0; i<rep.size(); i++){
        double temp = (Math.cos(angleRad) * (rep.get(i).x - x) - Math.sin(angleRad)*(rep.get(i).y - y) + x);
        rep.get(i).y = (Math.sin(angleRad) * (rep.get(i).x - x) + Math.cos(angleRad)*(rep.get(i).y - y) + y);
        rep.get(i).x = temp;
    }}