3

让我首先说明我的数学很糟糕。

我正在尝试重新定位和旋转一个矩形。但是,我需要从一个不是 0,0 的点旋转矩形,而是根据它的坐标移动了多远。我确信这没有多大意义,所以我做了一些草图来帮助解释我需要什么。

替代文字

上图显示了红色矩形从 0% 到 100% 的 3 个阶段。红色矩形的 X 和 Y 坐标(红色矩形的左上角)仅移动蓝色矩形高度的一定百分比。

替代文字

红色矩形可以旋转。仅关注上面的中间示例(“距离 -50%”),其中红色矩形重新定位在蓝色矩形高度的 -50 处,上图中的新角度现在为 -45º。它已从 0, 0 点旋转。

替代文字

现在,我的问题是我希望它的旋转点反映它的位置。

红色和蓝色矩形大小相同,但宽度和高度相反。因为红色矩形的 0,0 坐标现在是蓝色矩形高度的 -50%,并且由于它们具有相反的宽度和高度,我希望旋转点是红色矩形宽度的 50%(或蓝色矩形的 50%高度,这是同一件事)。

而不是专门告诉红色矩形以其宽度的 50% 旋转,为了做我想做的事,我需要通过使用一个公式来模拟这样做,该公式将定位红色矩形的 X 和 Y 坐标,以便其旋转点反映它的位置。

4

5 回答 5

4

这是您的问题的图解解决方案:

从偏心旋转确定位置增量的方法。

于 2010-06-20T01:54:30.697 回答
4

这真的很简单。

1.让我们确定要旋转矩形的点,即旋转矩形时不会移动的旋转点 ( RP )。让我们假设该点由下图中的菱形表示。

替代文字

2.平移 4 个点,使RP位于(0,0)处。假设该点的坐标是(RP x ,RP y ),因此用这些坐标减去矩形的所有 4 个角。

替代文字

3.使用旋转矩阵旋转点(将点逆时针围绕原点旋转某个角度,由于之前的平移,该点现在是旋转点):

替代文字

下图显示了逆时针旋转 45° 的矩形。

替代文字

4.将矩形向后平移(通过将RP添加到所有 4 个点): 替代文字

我想这就是你想要的:)

于 2010-06-20T03:32:19.253 回答
3

我不完全理解您需要什么,但似乎围绕任意点旋转矩形的过程可能会有所帮助。

假设我们要围绕原点 (0,0) 旋转一个点 (x,y) d 弧度。旋转点的位置公式为:

x' = x*cos(d) - y*sin(d)
y' = x*sin(d) + y*cos(d)

现在我们不想围绕原点旋转,而是围绕给定点(a,b)旋转。我们所做的是首先将原点移动到 (a,b),然后应用上面的旋转公式,然后将原点移回 (0,0)。

x' = (x-a)*cos(d) - (y-b)*sin(d) + a
y' = (x-a)*sin(d) + (y-b)*cos(d) + b

这是您围绕点 (a,b) 旋转点 (x,y) d 弧度的公式。

对于您的问题 (a,b) 将是蓝色矩形右侧中间的点,而 (x,y) 将是红色矩形的每个角。该公式给出了 (x',y') 旋转红色矩形角的坐标。

于 2010-06-20T01:26:07.560 回答
0

如果知道原点O和旋转矩形边上的点P,就可以计算出两者之间的向量:

替代文字
(来源:equationsheet.com

您可以通过使用此向量的点积来获得向量和 x 轴之间的角度:

替代文字
(来源:equationsheet.com

鉴于此,您可以通过将矩形上的任何点乘以旋转矩阵来变换它:

替代文字
(来源:equationsheet.com

于 2010-06-20T01:20:40.927 回答
0

看起来你可以通过更巧妙的定位来避免更复杂的旋转?例如,在最后一个示例中,将红色框定位在“-25% 蓝色高度”和“-25% 红色高度”——如果我遵循你的参考方案——然后执行你想要的旋转。

于 2010-06-20T01:27:25.417 回答