变换不以原点为中心的矩形的顶点

发布于 2024-11-10 02:53:44 字数 174 浏览 0 评论 0 原文

我认为我只是让这个变得过于复杂,但我有一个矩形,我试图使用旋转值来绘制。我有所有四个顶点的坐标,并且我需要顺时针旋转 X 度时的新坐标。

编辑:需要注意的一件事是,我在 HTML5 画布上绘图,因此坐标系有点不同。 X和Y总是> 0 且 Y 的增加向下进行。

有什么想法吗?

谢谢

I think I am just over-complicating this but I have a rectangle that I am trying to draw using a rotation value. I have the coordinates of all four vertices and I need the new coordinates when rotated by X degrees clockwise.

EDIT: One thing to note, I am drawing on the HTML5 canvas so the coordinate system is a little different. X and Y are always > 0 and and increase in Y progresses downward.

Any ideas?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温折酒 2024-11-17 02:53:44

因此,您真正需要的是一个接受点、原点(在本例中为矩形的中心)和角度的函数:

function rotatePoint(p, origin, angle) {
  if (angle === 0) return p;
  // make the origin essentially zero:
  var px = p.x - origin.x;
  var py = p.y - origin.y;
  if (px == 0 && py == 0) return p;
  var rad = angle * Math.PI / 180;
  var cosine = Math.cos(rad);
  var sine = Math.sin(rad);
  p.x = cosine * px - sine * py;
  p.y = sine * px + cosine * py;
  // put the point back:
  p.x += origin.x;
  p.y += origin.y;
  return p;
};

因此,如果您想将顶点绕中心旋转 10,10 度 45 度(比如说)20,20,你会这样做: rotatePoint({x:10, y:10}, {x:20, y:20}, 45) 会给你 (20, 5.85),等等。

So all you really need is a function that takes a point, an origin (the center of your rectangle in this case) and an angle:

function rotatePoint(p, origin, angle) {
  if (angle === 0) return p;
  // make the origin essentially zero:
  var px = p.x - origin.x;
  var py = p.y - origin.y;
  if (px == 0 && py == 0) return p;
  var rad = angle * Math.PI / 180;
  var cosine = Math.cos(rad);
  var sine = Math.sin(rad);
  p.x = cosine * px - sine * py;
  p.y = sine * px + cosine * py;
  // put the point back:
  p.x += origin.x;
  p.y += origin.y;
  return p;
};

So if you wanted to rotate a vertex at 10,10 by 45 deggrees about the center which is (say) 20,20, you would do: rotatePoint({x:10, y:10}, {x:20, y:20}, 45) would give you (20, 5.85), and so on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文