我试图将 java 中的 2D 点围绕另一个具有指定度数值的点旋转,在本例中只是围绕点 (0, 0) 旋转 90 度。
Method:
public void rotateAround(Point center, double angle) {
x = center.x + (Math.cos(Math.toRadians(angle)) * (x - center.x) - Math.sin(Math.toRadians(angle)) * (y - center.y));
y = center.y + (Math.sin(Math.toRadians(angle)) * (x - center.x) + Math.cos(Math.toRadians(angle)) * (y - center.y));
}
预期 (3, 0):X = 0,Y = -3
返回 (3, 0):X = 1.8369701987210297E-16,Y = 1.8369701987210297E-16
预期 (0, -10):X = -10,Y = 0
返回 (0, -10):X = 10.0,Y = 10.0
是方法本身有问题吗?我将该功能移植自(在 Lua 中旋转 2D 点 - GPWiki)到爪哇。
EDIT:
做了一些性能测试。我没想到会这样,但矢量解决方案赢了,所以我将使用这个。
如果您有权访问java.awt
, 这只是
double[] pt = {x, y};
AffineTransform.getRotateInstance(Math.toRadians(angle), center.x, center.y)
.transform(pt, 0, pt, 0, 1); // specifying to use this double[] to hold coords
double newX = pt[0];
double newY = pt[1];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)