1

我有几个形状要旋转并在它们之间保持相同的距离。最好的方法是什么?我正在考虑计算包裹所选形状的矩形的中心,并与该点相比旋转形状

这是我的代码

    while(iter.hasNext()  ){
        shape = (Shape)iter.next(); 
        anchor = getCenter();
        AffineTransform t =  shape.getAffineTransform();    
        t.rotate(Math.toRadians(thetaDegrees), anchor.x, anchor.y);         
        shape.setAffineTransform(t);

    }

谢谢

4

4 回答 4

1

原则上,旋转始终是保持距离的操作(等距,在数学术语中,类似于平移,与缩放和剪切操作不同)。因此,如果您围绕任何点(以相同的角度)旋转所有形状,它总是会为您提供所需的属性。

于 2011-03-09T23:22:00.030 回答
1

我与前两个答案一致,旋转不应该改变任何形状。

需要注意的是,您需要旋转一个形状,然后从原点旋转它。因此,形状中的每个顶点都是针对公共参考框架进行测量的。

例如,如果您有两个正方形 A 和 B,它们的长度都是 10 个单位。一个错误是使用点 (0, 0) (0, 10) (10, 10) (10, 0) 创建两个形状。例如,如果正方形 B 在 A 上方,那么您的形状 A 和以前一样,但形状 B 是 (0, 10) (10, 10) (20, 10), (10, 10))。现在您可以同时旋转 A 和 B 并且它们在旋转时将保持它们的相对位置(如果我没记错的话,旋转通常作为参考(0,0))

于 2011-03-09T23:32:32.383 回答
0

只要您围绕同一点旋转每个对象(当然,旋转相同的角度),您就可以选择任何您想要的点作为中心。

常见的选择是边界框并集的中心、单个对象中心的平均值、中心的面积加权平均值等。您甚至可以围绕对象组之外的任意点进行旋转。它更多地取决于您想要实现的目标,而不是其他任何事情。

于 2011-03-09T23:19:16.057 回答
0

您需要保持对象的初始状态(即位置),应用保存的位置进行旋转,然后检查对象是否在边界内。如果它们在边界之外,那么您需要以适当的距离将它们平移到边界框的中心。

除非您有围绕其中心旋转的圆圈,否则旋转将始终修改边界框(扩大或缩小它)。这就是为什么您需要始终保留原始参考并从中进行转换的原因。

于 2011-03-10T00:42:17.333 回答