Вращайте несколько фигур и сохраняйте соотношение - PullRequest
1 голос
/ 10 марта 2011

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

Это мой код

    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 ]

1 голос
/ 10 марта 2011

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

1 голос
/ 10 марта 2011

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

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

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

0 голосов
/ 10 марта 2011

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

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

0 голосов
/ 10 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...