我想要旋转几个形状并保持它们之间的相同距离。 最好的方法是什么? 我正在考虑计算包裹所选形状的矩形的中心,并旋转与该点相比的形状
这是我的代码
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);
}
由于
答案 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)
您需要保持对象的初始状态(即位置),应用保存的位置进行旋转,然后检查对象是否在边界内。如果它们超出界限,则需要将它们转换为具有适当距离的边界框的中心。
除非你的圆圈围绕它们的中心旋转,否则旋转将始终修改边界框(增长或缩小它)。这就是为什么你需要始终保持原始参考并从中转变。