让我首先说明我在数学方面很可怕。
我正在尝试重新定位并旋转矩形。但是,我需要从不是0,0的点旋转矩形,而是根据坐标移动的距离。我确信这没有多大意义,所以我做了一些草图来帮助解释我需要的东西。
alt text http://www.freeimagehosting.net/uploads/5f0c9d5aa6.png
上图显示红色矩形的3个阶段从0%移动到100%。红色矩形的X和Y坐标(红色矩形的左上角)仅移动蓝色矩形高度的一定百分比。
alt text http://www.freeimagehosting.net/uploads/a316b5650f.png
红色矩形可以旋转。仅关注上面的中间示例(“距离-50%”),其中红色矩形重新定位在蓝色矩形高度的-50处,上图中的新角度现在为-45º。它已从0,0点旋转。
alt text http://www.freeimagehosting.net/uploads/9c97165908.png
现在,我的问题是我希望它的旋转点反映它的位置。
红色和蓝色矩形的大小相同,但宽度和高度相反。因为红色矩形的0,0坐标现在是蓝色矩形高度的-50%,并且由于它们具有相反的宽度和高度,我希望旋转点是红色矩形宽度的50%(或蓝色矩形的50%)身高,这是一回事。)
而不是专门告诉红色矩形以其宽度的50%旋转,为了做我想要的,我需要通过使用一个公式来模拟,这将使红色矩形的X和Y坐标定位,以便它旋转点反映了它的位置。
答案 0 :(得分:4)
以下是您问题的解决方案:
答案 1 :(得分:4)
真的很简单。
1。让我们确定你想要旋转矩形的点,即旋转你的矩形周围不会移动的旋转点( RP ) 。我们假设该点由下图中的菱形表示。
2. 翻译4个点,以便 RP 位于(0,0)。假设该点的坐标是(RP x ,RP y ),因此用这些坐标减去矩形的所有4个角。
3。使用rotation matrix旋转点(在原点周围逆时针旋转一个点,通过某个角度,这个角度现在是前一个平移的旋转点):
下图显示了逆时针旋转45°的矩形。
4. 将矩形翻译回来(通过将 RP 添加到所有4个点):
我认为这就是你想要的:)
答案 2 :(得分: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')。
答案 3 :(得分:0)
如果你知道原点O和旋转矩形一侧的点P,你可以计算两者之间的向量:
alt text http://www.equationsheet.com/latexrender/pictures/9954bf8d997098ab327f37abd34eb70e.gif
您可以通过使用此向量的点积来获取向量和x轴之间的角度:
alt text http://www.equationsheet.com/latexrender/pictures/a20a486c9afa2b9a33b8a0dab351a6ed.gif
鉴于此,您可以通过将其乘以旋转矩阵来变换矩形上的任何点:
alt text http://www.equationsheet.com/latexrender/pictures/9243080836834d7d86427d99d656f3e8.gif
答案 4 :(得分:0)
您最初可以通过更狡猾的定位来避免更复杂的旋转?例如,在最后一个示例中,将红色框定位在“-25%蓝色高度”和“-25%红色高度” - 如果我按照您的参考方案 - 然后执行您想要的旋转。