So you're given this weird case:
You know the top-left corner
(x, y)
of a rotated rectangle, along with its widthw
, heighth
, and rotation anglerotation
.
The question is: how do you find the center of that rotated rectangle?
At first glance, this looks like a total brain-buster.
But here's a little trick:
Think backwards.
🤯 Flip Your Perspective
Imagine the rectangle before it was rotated.
It was perfectly upright, right?
So you had a regular rectangle sitting at (x, y)
, and then it got rotated around its top-left corner by some angle.
Now ask yourself:
Where would the center of the original rectangle have moved to after that rotation?
Exactly — if we can figure out where the original center ended up, that's our answer.
📐 So What's the Original Center?
If we treat (x, y)
as the origin (0,0), then the upright rectangle’s center is just:
(dx, dy) = (w / 2, h / 2)
Now we rotate that point around the origin using basic 2D rotation formulas:
rotatedX = dx * cos(θ) - dy * sin(θ)
rotatedY = dx * sin(θ) + dy * cos(θ)
Then we shift everything back by adding x
and y
to those results.
✅ Final Formula
So the rotated center becomes:
{
x: x + dx * cos(θ) - dy * sin(θ),
y: y + dx * sin(θ) + dy * cos(θ)
}
Where θ
is the angle in radians.
🧪 Full Working Code
function getRotatedRectCenter(
x: number,
y: number,
w: number,
h: number,
angle: number // in degrees
) {
const dx = w / 2
const dy = h / 2
const radian = (angle * Math.PI) / 180
const cos = Math.cos(radian)
const sin = Math.sin(radian)
return {
x: x + dx * cos - dy * sin,
y: y + dx * sin + dy * cos,
}
}
🔚 TL;DR
- The rectangle was rotated around its top-left corner.
- So rotate the center of the upright rectangle using basic 2D rotation math.
- Then just shift it back by
(x, y)
.
Clean, neat, and totally doable 🧼
Top comments (0)