Math 将坐标转换为旋转坐标系
我正在尝试将旧图形编辑器的旋转和裁剪矩形设置转换为使用不同于旧图形编辑器的坐标系的新编辑器。下图说明了该问题: 所有矩形具有相同的纵横比(例如3:2),并且所有坐标在边上都进行了规格化(即在X和Y方向上从0到1) 旧程序保存与绿色矩形对齐的坐标系中给定的蓝色矩形C的角坐标(原点位于A),以及黄色矩形的旋转角度 新程序需要在与黄色矩形(原点在B)对齐的坐标系中,蓝色矩形角的坐标。我如何实现从旧到新的转变 这似乎是一个简单的数学问题,但自从上数学课以来已经很多年了,我用笔和纸也找不到这个问题(许多类似的问题,但我找不到完全匹配的问题…)让Math 将坐标转换为旋转坐标系,math,geometry,rotation,transform,coordinate-systems,Math,Geometry,Rotation,Transform,Coordinate Systems,我正在尝试将旧图形编辑器的旋转和裁剪矩形设置转换为使用不同于旧图形编辑器的坐标系的新编辑器。下图说明了该问题: 所有矩形具有相同的纵横比(例如3:2),并且所有坐标在边上都进行了规格化(即在X和Y方向上从0到1) 旧程序保存与绿色矩形对齐的坐标系中给定的蓝色矩形C的角坐标(原点位于A),以及黄色矩形的旋转角度 新程序需要在与黄色矩形(原点在B)对齐的坐标系中,蓝色矩形角的坐标。我如何实现从旧到新的转变 这似乎是一个简单的数学问题,但自从上数学课以来已经很多年了,我用笔和纸也找不到这个问题(许多
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的角由下式给出
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)-c
和d(i)=r(q)*(c(i)-c
每个对角线i
可以按
s(i, j) = min (|r(j).x| / |d(i).x|, |r(j).y| / |d(i).y|)
B移动到r(j)
定义的区域之外之前。计算i=0,1
和j=0,2
的s(i,j)
,并让s
为这4个值中的最小值
根据测量q
的方式,您可能需要将q'=atan2(kx*sin(q),ky*cos(q))
转换为q
来解释纵横比问题。我可能没有足够清楚地描述已知变量。只有矩形C的坐标和相对于X轴的旋转角度(都在坐标系A中)是已知的。B的坐标是未知的。然而,众所周知,A和B的长宽比都是相同的,B是可以放在A内的最大矩形。矩形C实际上可以放在矩形A内的任何地方,并且可能有不同的长宽比。额外的约束应该使B的计算更容易:矩形B位于矩形A的中心。不幸的是,这并不能解决整个问题,因为B(0)是未知的(见我上面的评论)。这还是很有帮助的,因为现在我知道这实际上是两个独立的问题,你回答了后一个问题。现在我必须找出给定A和b的纵横比约束条件下b(0)的坐标,然后我可以用你的公式变换任何类型的C。@JPK我添加了一个扩展的讨论。你的答案似乎是假设矩形C总是具有与A和b相同的纵横比,这并不总是正确的。但是,用旋转的A替换C,然后用你的算法找到s,我可以计算b(I),然后我可以旋转C的坐标。非常感谢你的帮助!