If I have some shapes defined using arrays of coordinates e.g.
[[-30, -30], [-30, 30], [30, 30], [30, -30]]
and edges defined using:
[[0,1],[0,3],[1,2],[2,3]]
to make a square.
How do I programmatically tell the shape to rotate *at the center against an angle of 0->359 in javascript?
*Or better yet, is there a function which allows me to choose the center of rotation?
** Currently, I've managed to get the shape to circle the canvas using :
var x_rotate = Math.sin(angle * Math.PI /180);
var y_rotate = Math.cos(angle * Math.PI /180);
// for each coordinate
//add x_rotate and y_rotate if coordinate > 0 or subtract if coordinate < 0
If I have some shapes defined using arrays of coordinates e.g.
[[-30, -30], [-30, 30], [30, 30], [30, -30]]
and edges defined using:
[[0,1],[0,3],[1,2],[2,3]]
to make a square.
How do I programmatically tell the shape to rotate *at the center against an angle of 0->359 in javascript?
*Or better yet, is there a function which allows me to choose the center of rotation?
** Currently, I've managed to get the shape to circle the canvas using :
var x_rotate = Math.sin(angle * Math.PI /180);
var y_rotate = Math.cos(angle * Math.PI /180);
// for each coordinate
//add x_rotate and y_rotate if coordinate > 0 or subtract if coordinate < 0
Share
Improve this question
edited Apr 28, 2023 at 19:52
General Grievance
5,04338 gold badges37 silver badges56 bronze badges
asked Aug 12, 2017 at 9:40
Loveen DyallLoveen Dyall
8342 gold badges8 silver badges21 bronze badges
7
- Rotating to most angles won't keep precision. Do you want to approximate? – Oliver Ni Commented Aug 12, 2017 at 9:42
- Yes approximation is fine thanks – Loveen Dyall Commented Aug 12, 2017 at 9:42
- This answer shows you how to rotate points stackoverflow./a/45521906/3877726 – Blindman67 Commented Aug 12, 2017 at 10:16
- Blindman it will take me a moment to verify your ment please bare with me – Loveen Dyall Commented Aug 12, 2017 at 10:29
- 1 There are 50 in my fiddle ... And if you need all shapes to have its own angle and angleSpeed, this technique also works jsfiddle/tj3dgg0c/1 – Kaiido Commented Aug 13, 2017 at 3:30
3 Answers
Reset to default 8Here you go, rotates point x, y
around point centerx, centery
by degrees
degrees. Returns floating values, round if you need to.
To rotate a shape, rotate all the points. Calculate the center if you need to, this does not do it.
Desmos link with x
as a
, y
as b
, centerx
as p
, centery
as q
, and degrees
as s
function rotatePoint(x, y, centerx, centery, degrees) {
var newx = (x - centerx) * Math.cos(degrees * Math.PI / 180) - (y - centery) * Math.sin(degrees * math.PI / 180) + centerx;
var newy = (x - centerx) * Math.sin(degrees * Math.PI / 180) + (y - centery) * Math.cos(degrees * math.PI / 180) + centery;
return [newx, newy];
}
You could use a formular for rotating the point around the origin.
function rotate(array, angle) {
return array.map(function (p) {
function d2r(a) { return a * Math.PI / 180; }
return [
Math.cos(d2r(angle)) * p[0] - Math.sin(d2r(angle)) * p[1],
Math.sin(d2r(angle)) * p[0] - Math.cos(d2r(angle)) * p[1],
];
});
}
console.log(rotate([[-30, -30], [-30, 30], [30, 30], [30, -30]], 45));
console.log(rotate([[-30, -30], [-30, 30], [30, 30], [30, -30]], 90));
.as-console-wrapper { max-height: 100% !important; top: 0; }
use css transition and change transform by javascript
https://www.w3schools./cssref/css3_pr_transform.asp
https://developer.mozilla/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions