document.onkeydown = function (event) { switch (event.keyCode) { case 74: //player presses "j" px = player.calculateCentreX(); py = player.calculateCentreY(); x1 = rotateX(player.x1,player.y1,35,px,py); x2 = rotateX(player.x2,player.y2,35,px,py); x3 = rotateX(player.x3,player.y3,35,px,py); y1 = rotateY(player.x1,player.y1,35,px,py); y2 = rotateY(player.x2,player.y2,35,px,py); y3 = rotateY(player.x3,player.y3,35,px,py); player.setPoints(x1,y1,x2,y2,x3,y3); break; default: break; } }; function rotateX(cx,cy,angle,px,py) { x = Math.cos(angle)*(px-cx) - Math.sin(angle)*(py-cy) + cx return x } function rotateY(cx,cy,angle,px,py) { y = Math.sin(angle)*(px-cx) + Math.cos(angle)*(py-cy) + cy return y }Estoy usando lo anterior para tratar de rotar un triángulo (el jugador) sobre su centro cada vez que el usuario presiona "J". El método setPoints simplemente establece los valores de los triángulos x1,y1,x2,y2,x3,y3 en los puntos actualizados. Cada vez que el usuario presiona J, el triángulo gira pero crece en tamaño. ¿Alguien puede señalar qué está mal aquí?
Parece que está utilizando un orden de argumento incorrecto: la función se define con center, angle, point
cx,cy, angle, px,py ^ ^ center point pero lo llamas con point, angle, center
px = player.calculateCentreX(); py = player.calculateCentreY(); x1 = rotateX(player.x1,player.y1, 35, px,py); !!!!! ^ ^ point center calculated aboveComo resultado, el centro anterior gira alrededor de los vértices.