旋转几个形状并保持关系

时间:2011-03-09 23:15:15

标签: java rotation shape

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

这是我的代码

    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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我与之前的两个答案重合,旋转不应该改变形状中的任何东西。

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

例如,如果您有两个正方形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))

答案 2 :(得分:0)

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

常见选择是边界框的并集​​中心,各个对象中心的平均值,中心的面积加权平均值等。您甚至可以围绕对象组外的任意点旋转。它更多地取决于你想要实现的目标。

答案 3 :(得分:0)

您需要保持对象的初始状态(即位置),应用保存的位置进行旋转,然后检查对象是否在边界内。如果它们超出界限,则需要将它们转换为具有适当距离的边界框的中心。

除非你的圆圈围绕它们的中心旋转,否则旋转将始终修改边界框(增长或缩小它)。这就是为什么你需要始终保持原始参考并从中转变。