首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将坐标转换为旋转坐标系

将坐标转换为旋转坐标系
EN

Stack Overflow用户
提问于 2011-08-23 22:15:10
回答 1查看 2.7K关注 0票数 2

我正在尝试将旧图形编辑器的旋转和裁剪矩形设置转换为使用与旧编辑器不同的坐标系的新编辑器。下图说明了这个问题:

所有的矩形都有相同的纵横比(例如3:2),并且所有的坐标都在边缘上进行了标准化(即在X和Y方向上从0到1)。

旧程序保存与绿色矩形(原点为A)对齐的坐标系中给定的蓝色矩形C的角坐标,以及黄色矩形的旋转角度。

新程序需要坐标系统中蓝色矩形的角坐标与黄色矩形对齐(原点为B)。如何实现从旧到新的转换?

这似乎是一道简单的数学题,但数学课已经上了这么多年了,我既不能用纸笔解决这个问题,也不能搜索这个网站(有很多类似的问题,但我找不到一个匹配的……)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-24 02:25:11

c(0), c(1), c(2), c(3)C的四个角,b(0)是B的坐标系所在的角B。设q是B的x轴的旋转角度。所有这些角度和点必须在同一坐标系中给定。

要找到B中c(i)的坐标,请将向量c(i) - b(0)旋转角度q (或-q,取决于测量对象的方式)。为此,您可以使用旋转矩阵。让cq = cos(q)sq = sin(q)(dx, dy) = c(i) - b(0)。B中的c(i)的坐标是

c = (c(0) + c(2)) / 2是C的中心,S(s)是按s缩放的矩阵,R(q)是按q旋转的矩阵。B的角由下式给出

代码语言:javascript
运行
复制
b(i) = c + S(s) * R(q) * (c(i) - c)

矩形A的角点a(0), a(1), a(2), a(3)也是已知的。我们希望确定缩放参数s的最大可能值,使得B的所有点b(i)都在矩形A内。

我认为这里最安全和最简单的方法是考虑相关的b(i)a(i)对,对于这些对,计算最大值s(i, j),如果是s = s(i, j),则b(i)位于a(j)的角区域内。

a(0)a(2)是A的对角,c(0)c(1)是C的邻角,r(j) = a(j) - cd(i) = R(q) * (c(i) - c)是C的邻角。

每个对角线i可以按以下比例进行缩放

代码语言:javascript
运行
复制
s(i, j) = min (|r(j).x| / |d(i).x|, |r(j).y| / |d(i).y|)

在B移出r(j)定义的区域之前。计算i = 0, 1j = 0, 2s(i, j),并将s设为这4个值中的最小值。

根据q的测量方式,您可能需要对q应用转换q' = atan2(kx * sin(q), ky * cos(q)),以解决纵横比问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7162439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档