rotate rotar mover metodo imagen como java geometry rotation 2d point

rotar - Java: Girar el Punto alrededor de otro por un valor de grado especificado



rotar imagen java netbeans (2)

Estoy tratando de rotar un punto 2D en Java alrededor de otro con un valor de grado específico, en este caso simplemente alrededor del punto (0, 0) a 90 grados.

Método:

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)); }

Esperado para (3, 0): X = 0, Y = -3

Devuelto por (3, 0): X = 1.8369701987210297E-16, Y = 1.8369701987210297E-16

Esperado para (0, -10): X = -10, Y = 0

Devuelto por (0, -10): X = 10.0, Y = 10.0

¿Hay algún problema con el método en sí? Transmití la función desde (Girar un punto en 2D en Lua - GPWiki) a Java.

EDITAR:

Hice algunas pruebas de rendimiento. No lo hubiera pensado, pero la solución vectorial ganó, así que usaré esta.


Estás mutando el valor X del center antes de realizar el cálculo en el valor Y. Use un punto temporal en su lugar.

Además, esa función toma tres parámetros. ¿Por qué el tuyo solo toma dos?


Si tienes acceso a java.awt , esto es solo

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];