Поверните несколько фигур и сохраните соотношение

У меня есть несколько фигур, которые я хочу повернуть и сохранить одинаковое расстояние между ними. Как лучше всего это сделать? Я думал вычислить центр прямоугольника, который оборачивает выбранные фигуры, и повернуть фигуру по сравнению с этой точкой.

это мой код

    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);

    }

Спасибо


person Momo    schedule 09.03.2011    source источник


Ответы (4)


В принципе, вращение всегда является операцией сохранения расстояния (изометрия, в математических терминах, подобная переносу, в отличие от операций масштабирования и сдвига). Таким образом, если вы повернете все свои фигуры вокруг любой точки (на один и тот же угол), это всегда даст вам желаемое свойство.

person Paŭlo Ebermann    schedule 09.03.2011

Я согласен с двумя предыдущими ответами, вращение не должно ничего менять в форме.

Предостережение будет заключаться в том, что вам нужно повернуть ОДНУ ФОРМУ, и вы повернете ее от начала координат. Таким образом, каждая вершина фигур измеряется относительно общей системы отсчета.

Например, если у вас есть два квадрата 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))

person SJuan76    schedule 09.03.2011

Пока вы вращаете каждый объект вокруг одной и той же точки (и, конечно, под одним и тем же углом), вы можете выбрать любую точку в качестве центра.

Обычно выбираются центр объединения ограничивающих рамок, среднее значение центров отдельных объектов, средневзвешенное по площади значение центров и т. д. Вы даже можете вращаться вокруг произвольной точки вне группы объектов. Это больше зависит от того, чего вы хотите достичь, чем от чего-либо еще.

person Marcelo Cantos    schedule 09.03.2011

Вам нужно будет сохранить начальное состояние объектов (т.е. положение), применить это сохраненное положение для вращения, а затем проверить, находятся ли объекты в пределах границ. Если они находятся за пределами границ, вам необходимо перевести их к центру ограничивающей рамки с соответствующим расстоянием.

Если у вас нет кругов, которые вращаются вокруг своего центра, вращение всегда будет изменять ограничивающую рамку (увеличивая или уменьшая ее). Вот почему вам нужно всегда сохранять исходную ссылку и преобразовывать ее.

person brainwash    schedule 10.03.2011