我试图使某些对象(由点表示)绕固定点旋转,但是当它们旋转时,它们越来越接近旋转点。这是旋转三角形早期的屏幕截图:
这是片刻之后的镜头
如您所知,距中心的距离以及彼此之间的距离都缩短了。这是我用来使点围绕另一个点旋转的代码:
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()包装表达式,以查看是否有必要在需要时将其四舍五入。有什么想法吗?
最佳答案
第二个公式所需的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;
}}
关于java - 试图绕一点旋转,但无论如何都会失去精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31767073/