我试图让一些物体(由点表示)围绕一个固定点旋转,但是当它们旋转时,它们越来越接近旋转点。这是旋转三角形早期的截图:
这是拍摄片刻之后的拍摄
正如您所知,距离中心的距离以及彼此的距离都会缩短。这是我用来围绕另一个点旋转点的代码:
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()包装表达式,看看是否有必要通过四舍五入来帮助。有什么想法吗?
答案 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;
}}